vba实现Excel表格指定区域截屏并保存为本地文件
Exce中长表格区域截屏需求
Excel是否可以实现屏幕任意区域截图?虽然目前市面上已经有很多截图软件了,并且微信、QQ等也都提供了截图功能,而且十分方便好用。但是我目前在工作中经常需要对excel表格指定区域进行截图,在使用上述软件进行截图的时候经常遇到截图不精确的问题,就需要重新截取;另外就是excel表格长度过长,超过了屏幕长度,需要滚动截屏,这样让边界的选取更加困难。
通过检索发现了网上有借助PowerShell可实现任意区域截图功能。但是我作为一个深度vba使用者,还是喜欢使用vba来解决这个问题。
解决方案
vba实现长区域截屏
以下是我的代码实现
' 定义一个名为SaveRangeAsPNG的宏,用于将指定范围的单元格区域保存为PNG图片
Sub SaveRangeAsPNG()
' 选择工作表中的B2到G60单元格区域
ActiveSheet.Range("B2:G60").Select
' 复制所选区域为图片
Selection.CopyPicture Appearance:=xlScreen, Format:=xlPicture
' 在工作表中粘贴复制的图片
ActiveSheet.Pictures.Paste.Select
' 使用With语句来操作粘贴的图片对象
With Selection
' 复制粘贴的图片,以便后续操作
.Copy
' 添加一个图表对象,其大小与复制的图片相同
With ActiveSheet.ChartObjects.Add(0, 0, Selection.Width, Selection.Height).Chart
' 设置一个计时器,用于稍后粘贴图片
t = Timer
' 循环直到计时器超过设定的时间(这里设置为1秒)
While Timer < t + 1
DoEvents ' 允许其他事件在循环中发生
Wend
' 选择新添加的图表对象,咱也不知道为什么,但是没有这一句整个功能就容易截到白屏
.Parent.Select
' 粘贴之前复制的图片到图表对象中
.Paste
' 导出图表为PNG图片,保存在工作簿所在的文件夹下,文件名为工作表的名称
.Export ThisWorkbook.Path & "\" & ActiveSheet.Name & ".png"
' 删除图表对象,因为它不再需要
.Parent.Delete
End With
' 删除粘贴的图片,因为它已经保存为图片文件
.Delete
End With
End Sub
解释
代码主要是考虑了截图区域超出屏幕分辨率的细节问题,大家可以自行完善。
请重点注意这一句:
’ 选择工作表中的B2到G60单元格区域
ActiveSheet.Range(“B2:G60”).Select,当你需要截取不同区域的时候,就修改"B2:G60"为你选定的矩形区域即可。