ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 名课 - Power BI数据分析与可视化实战 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
Python自动化办公应用大全 Excel 2021函数公式学习大典 Kutools for Office 套件发布 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
12
返回列表 发新帖

[求助] 请教大神:VBA怎样导出图片?谢!

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-10-21 13:57 来自手机 | 显示全部楼层
psxk3535 发表于 2021-10-19 23:20
看看 https://club.excelhome.net/thread-1565669-1-1.html  joforn老师的代码可以保存成透明图片,看了 ...

可以的,是大神测试过的,但是貌似不是导出原图,而是截图保存为透明色的,

TA的精华主题

TA的得分主题

发表于 2021-10-21 14:18 | 显示全部楼层
本帖最后由 psxk3535 于 2021-10-22 16:58 编辑
白云无尽9987 发表于 2021-10-21 13:57
可以的,是大神测试过的,但是貌似不是导出原图,而是截图保存为透明色的,

偶然的机会看到了一句代码。.ShapeRange.Fill.Visible = msoFalse,好用

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2021-10-21 14:26 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
把工作簿另存为HTML格式就可以了

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-10-21 15:18 来自手机 | 显示全部楼层
aecn 发表于 2021-10-21 14:26
把工作簿另存为HTML格式就可以了

这种方法,遗憾的是名称不可控啊!

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-10-21 19:08 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
psxk3535 发表于 2021-10-21 14:18
你看看我这个可以吗,偶然的机会看到了一句代码。能力所限,改了好多遍,你试试,我这里暂时没有问题,可 ...

太好了!感激不尽!

TA的精华主题

TA的得分主题

发表于 2021-10-21 20:20 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
看下是否符合要求

请教大神:VBA怎样导出图片?谢!.zip

104.11 KB, 下载次数: 15

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2021-10-22 00:15 | 显示全部楼层
本帖最后由 psxk3535 于 2021-10-22 17:00 编辑

不行,我试了一下,导出的还是不透明的,你把导出的图片重新插入试试就知道了。加上这个代码,.ShapeRange.Fill.Visible = msoFalse  修改一下,就是透明的,不能按常理出牌,不知道到底是为什么。




TA的精华主题

TA的得分主题

发表于 2021-10-22 16:58 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
  1. Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
  2. Private Declare Function CloseClipboard Lib "user32" () As Long
  3. Private Declare Function RegisterClipboardFormat Lib "user32" Alias "RegisterClipboardFormatA" (ByVal lpString As String) As Long
  4. Private Declare Function IsClipboardFormatAvailable Lib "user32" (ByVal wFormat As Long) As Long
  5. Private Declare Function GetClipboardData Lib "user32" (ByVal wFormat As Long) As Long
  6. Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long
  7. Private Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As Long
  8. Private Declare Function GlobalSize Lib "kernel32" (ByVal hMem As Long) As Long
  9. Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal Destination As Long, ByVal Source As Long, ByVal Length As Long)

  10. Sub saveRange2PNG(SourceRange As Range, sPNGFile As String)
  11.     Dim lFormat As Long
  12.     Dim nSize As Long
  13.     Dim hClip As Long
  14.     Dim pData As Long
  15.     Dim bytBuffer() As Byte
  16.     Dim iFreeFile As Integer
  17.    
  18.     '复制单元格区域为图片
  19.     SourceRange.CopyPicture xlScreen, xlPicture
  20.     '粘贴到当前工作表中
  21.     ActiveSheet.Paste
  22.     '将单元格区域转变的图片再次剪切,剪贴板中就会出现一个格式为"PNG"的内容,读出其所含字节保存到硬盘中即为一个PNG文件
  23.     Selection.Cut
  24.    
  25.     '以下是读取剪贴板中指定格式对应字节内容并保存到硬盘的常规代码,详见https://club.excelhome.net/thread-1057488-1-1.html
  26.     If OpenClipboard(0) <> 0 Then
  27.         lFormat = RegisterClipboardFormat("PNG")
  28.         If IsClipboardFormatAvailable(lFormat) Then
  29.             hClip = GetClipboardData(lFormat)
  30.             pData = GlobalLock(hClip)
  31.             nSize = GlobalSize(hClip)
  32.             ReDim bytBuffer(nSize - 1)
  33.             CopyMemory VarPtr(bytBuffer(0)), pData, nSize
  34.             GlobalUnlock hClip
  35.             
  36.             '如果目标文件已存在,长度为m字节,要保存的png文件长度为n字节,并且m>n,如果直接保存将只替换前n个字节,后面m-n个字节仍然是旧文件内容
  37.             '需要在检查到文件已存在时用kill语句,或者用下面三句代码先将目标文件变为一个0字节的空文件
  38.             iFreeFile = FreeFile
  39.             Open sPNGFile For Output As iFreeFile
  40.             Close iFreeFile
  41.             
  42.             iFreeFile = FreeFile
  43.             Open sPNGFile For Binary As iFreeFile
  44.                 Put iFreeFile, , bytBuffer
  45.             Close iFreeFile
  46.         End If
  47.         CloseClipboard
  48.     End If
  49. End Sub

  50. Sub test()
  51.     Dim sFile As String
  52.     sFile = Application.GetSaveAsFilename("C:", "PNG图片(*.png),*.png", , "单元格区域另存为PNG", "保存图片")
  53.     'saveRange2PNG函数内部并不检查目标文件是否已存在,在使用前应进行检查并提醒用户,以免误覆盖
  54.     If Len(Dir(sFile, vbSystem + vbHidden)) > 0 Then
  55.         If MsgBox("文件" & sFile & "已存在,是否覆盖?", vbYesNo) = vbNo Then Exit Sub
  56.     End If
  57.     saveRange2PNG Sheet1.Range("a1:E4"), sFile
  58. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-10-25 15:13 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

这个倒是简单,但是很多要求都没有达到的..

TA的精华主题

TA的得分主题

发表于 2022-1-25 15:50 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-12-25 02:54 , Processed in 0.026098 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表