Excel 中使用vba对任意指定区域截屏保存为本地文件

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"为你选定的矩形区域即可。

  • 11
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值