ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 17903|回复: 40

[求助] 怎样用VBA把工作表选定区域保存为图片文件

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2014-12-28 10:31 | 显示全部楼层 |阅读模式

1、想把工作表选定区域保存为图片文件
2、图片文件名以某一单元格内容为名

例:   把A1:C30保存为图片  图片文件名为   A1单元格内容+1
          把A31:C60保存为图片 图片文件名为   A1单元格内容+2
          把A61:C90保存为图片 图片文件名为   A1单元格内容+3
          把A91:C120保存为图片 图片文件名为   A1单元格内容+4

以此类推 Book1.zip (471.86 KB, 下载次数: 221)


谢谢各位大大了

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-12-28 10:44 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-12-28 12:36 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 香川群子 于 2014-12-30 09:44 编辑

给你写了个单元格区域内容输出为jpg图片的过程代码,你可以自己修改示例宏代码自己灵活调用。
  1. Sub test()
  2.     Call RangeToPic(Range("A1:D5")) '直接输入要输出的区域……必须有Range()
  3.     Call RangeToPic(Selection) '按当前选中的区域
  4.     Call RangeToPic(Application.InputBox("Select Range", Type:=8)) '出现对话框选择区域
  5. End Sub

  6. Sub RangeToPic(Rng As Range, Optional Pnm = "", Optional Pth = "")
  7.     If Pth = "" Then Pth = ActiveWorkbook.Path '默认使用当前文件所在路径作为输出路径
  8.     If Pnm = "" Then Pnm = Left(ActiveWorkbook.Name, InStrRev(ActiveWorkbook.Name, ".") - 1) & "_" & Replace(Rng.Address(0, 0), ":", "_")
  9.     '默认使用当前【文件名_区域地址】作为输出文件名

  10.     If ActiveWindow.DisplayGridlines = True Then ActiveWindow.DisplayGridlines = False: flg = True '去掉默认格子线
  11.     Rng.CopyPicture Appearance:=xlScreen, Format:=xlPicture '把选择范围内容转化为截屏图片信息
  12.     With ActiveSheet.ChartObjects.Add(0, 0, Rng.Width + 1, Rng.Height + 1).Chart '在A1处按图片尺寸稍大建立1个空白图表对象
  13.         .ChartArea.Border.LineStyle = 0 '去除边框
  14.         .Paste '把刚才截屏的图片信息粘贴上去
  15.         .Export Pth & "" & Pnm & ".jpg", "JPG"  '按指定图片路径及名称导出jgp格式图片……如果区域内有图片应该用这个
  16.         .Export Pth & "" & Pnm & ".png", "PNG"  '按指定图片路径及名称导出png格式图片……这个对于纯数据工作表来说更好
  17.         .Parent.Delete '删去该临时增加的图表对象
  18.     End With
  19.     If flg Then ActiveWindow.DisplayGridlines = True '恢复默认格子线
  20. End Sub
复制代码
单元格区域内容输出为jpg图片的过程代码有3个参数,
第1个参数Rng为必需,写入单元格区域地址即可。
第2个参数Pnm为输出图片的名称,默认为【当前工作簿文件名_区域地址】
第3个参数为输出文件夹路径,默认为当前工作簿所在文件夹。


代码更新:
① 为了美观,应该去掉工作表的默认格子线。(如有表格应该自己事先画好格子线)
② 输出增加了png格式……对于纯数据区域来说更节省,但如果区域内含图片则还是用jpg格式较好。


点评

效果有点失真.  发表于 2014-12-28 12:58

评分

5

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-12-28 13:36 | 显示全部楼层
Rng.CopyPicture xlScreen, xlBitmap

这样,按位图复制,就不会失真了,。

TA的精华主题

TA的得分主题

发表于 2014-12-28 13:41 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 张雄友 于 2014-12-28 13:46 编辑
coby001 发表于 2014-12-28 13:36
Rng.CopyPicture xlScreen, xlBitmap

这样,按位图复制,就不会失真了,。

Rng.CopyPicture xlScreen, xlBitmap

效果一样的。

TA的精华主题

TA的得分主题

发表于 2014-12-28 13:50 | 显示全部楼层
张雄友 发表于 2014-12-28 13:41
Rng.CopyPicture xlScreen, xlBitmap

效果一样的。

把图片贴出来看看

TA的精华主题

TA的得分主题

发表于 2014-12-28 13:53 | 显示全部楼层
coby001 发表于 2014-12-28 13:50
把图片贴出来看看

................................
按您的.jpg

TA的精华主题

TA的得分主题

发表于 2014-12-28 14:00 | 显示全部楼层
张雄友 发表于 2014-12-28 13:53
................................

你说失真,,总要有个对比吧
一张图怎么对比??

TA的精华主题

TA的得分主题

发表于 2014-12-28 14:05 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
coby001 发表于 2014-12-28 14:00
你说失真,,总要有个对比吧
一张图怎么对比??

可能是我电脑问题,表格对象上有少许阴影。
原始的.jpg

TA的精华主题

TA的得分主题

发表于 2014-12-28 14:08 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
原始的 第二条竖线被加粗了
按 位图的 就是原样粗细~

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-9-29 20:29 , Processed in 0.041197 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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