ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] vba如何将单元格区域截图并保存?

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2016-6-25 14:04 | 显示全部楼层 |阅读模式
本帖最后由 zhigangchen 于 2016-6-25 16:18 编辑

之前,在excelhome论坛,已经有网友给出了从excel工作表区域截图并保存的方法和代码。但是在excel 2016环境下,我试了以后,发现截图出来的图片都是空白的,研究了一下,发现是在粘贴时,图片没有粘贴到chartoject之中。因此对代码进行了改良,可以使用了。代码如下:(申明:这此代码是网上下载的,只是经过我的修改!)

Sub SaveRngToJpg()
    Dim rng As Range
    Dim ad$, m&, mc$, shp As Shape
    Dim nm$, n&, myFolder$
    Sheet1.Activate
    n = 0
    myFolder = ThisWorkbook.Path & "\图片\"     '指定文件夹名称
    Set rng = Application.InputBox("请选择单元格", "选择", Type:=8)
    rng.Select
    Selection.Copy
    ActiveSheet.Pictures.Paste
    For Each shp In ActiveSheet.Shapes
        If shp.Type = 13 Then
            If Len(Dir(myFolder, vbDirectory)) = 0 Then
                MkDir myFolder
            End If
            n = n + 1
            ad = shp.TopLeftCell.Address
            m = shp.TopLeftCell.Row
            nm = Replace(Replace(rng.Address, "$", ""), ":", "-") & ".jpg" ’此处jpg可以更改为.png或.bmp,这些格式如果压缩,图片可能更清晰一些。
            shp.CopyPicture
            With ActiveSheet.ChartObjects.Add(0, 0, shp.Width, shp.Height).Chart
                .Parent.Select '必须要选择父对象chartojbect之后再粘贴,这样才能真正的粘上去。
                .Paste
                .Export myFolder & nm, "JPG"
                .Parent.Delete
            End With
            shp.Delete
        End If
    Next
    MsgBox ("已保存到图片文件夹下")
End Sub



单元格存为图片-完美使用.zip

787.94 KB, 下载次数: 1254

点评

单纯的更改扩展名并没有真正改变图像的格式  发表于 2016-6-26 20:34

评分

5

查看全部评分

TA的精华主题

TA的得分主题

发表于 2016-6-25 14:59 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
赞一个!这个不错

TA的精华主题

TA的得分主题

发表于 2016-6-25 15:36 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
谢谢分享    就是太模糊

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-6-25 16:15 | 显示全部楼层
02761752696 发表于 2016-6-25 15:36
谢谢分享    就是太模糊

  nm = Replace(Replace(rng.Address, "$", ""), ":", "-") & ".jpg"          这一句,改成  nm = Replace(Replace(rng.Address, "$", ""), ":", "-") & ".bmp"       ,BMP没有压缩。

TA的精华主题

TA的得分主题

发表于 2017-12-12 23:16 | 显示全部楼层
 你的研究成果太重要了,十分感谢!!!

With ActiveSheet.ChartObjects.Add(0, 0, shp.Width, shp.Height).Chart
                .Parent.Select '必须要选择父对象chartojbect之后再粘贴,这样才能真正的粘上去。
                .Paste
                .Export myFolder & nm, "JPG"
                .Parent.Delete
            End With

TA的精华主题

TA的得分主题

发表于 2018-3-27 16:53 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
如果想要达成批量截图,那改如何操作?  怎么填写循环语句。

TA的精华主题

TA的得分主题

发表于 2018-3-28 19:38 | 显示全部楼层
Private Sub CommandButton1_Click()
Dim my_Range As Range
Set my_Range = Selection
my_Range.CopyPicture

Dim my_Chart As Chart
Set my_Chart = ActiveSheet.ChartObjects.Add(0, 0, my_Range.Width, my_Range.Height).Chart
my_Chart.Paste
my_Chart.Export ThisWorkbook.Path & "\" & "my_Pic.jpg", "JPG"
my_Chart.Parent.Delete
End Sub


这段也需要选定后才能导出。

TA的精华主题

TA的得分主题

发表于 2018-8-22 14:47 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-8-22 16:54 | 显示全部楼层
ycbfwl 发表于 2018-8-22 14:47
还是没解决失真的问题,

这清晰度还能接受吧?
清晰截图.gif
sheet6.gif

TA的精华主题

TA的得分主题

发表于 2019-1-21 20:51 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
老师好,我要是不用选择区域,而是要固定某个区域怎么处理,比如A2:RW23,否则每次都需要选择比较麻烦,谢谢!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-19 09:28 , Processed in 0.045937 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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