在Excel VBA中获取屏幕截图并保存在单独的文件中
我正试图通过在后台单击带有VBA代码的按钮,直接从excel工作表自动生成小屏幕截图。情况如下: 我必须拍摄cellrange G1:I12的屏幕截图,并将其保存在文件名中 称为scrt.png。屏幕截图的大小应该与cellrange G1:I12的大小完全相同 在前面的一篇文章中,我发现了这段代码,它首先将所提到范围的屏幕截图包含到一个新的图表中,然后成功地将scrt.png文件保存在所提到的位置。实际上,它成功地在图表表中生成选定单元格范围的位图,并在所述位置生成单独的scrt.png文件。 但是,代码的问题是,创建的scrt.png文件具有整个图表页屏幕截图。我要查找的只是使用上述单元格范围捕捉保存的文件。 已经尝试调整代码,但没有成功。任何帮助都将不胜感激在Excel VBA中获取屏幕截图并保存在单独的文件中,vba,excel,screenshot,Vba,Excel,Screenshot,我正试图通过在后台单击带有VBA代码的按钮,直接从excel工作表自动生成小屏幕截图。情况如下: 我必须拍摄cellrange G1:I12的屏幕截图,并将其保存在文件名中 称为scrt.png。屏幕截图的大小应该与cellrange G1:I12的大小完全相同 在前面的一篇文章中,我发现了这段代码,它首先将所提到范围的屏幕截图包含到一个新的图表中,然后成功地将scrt.png文件保存在所提到的位置。实际上,它成功地在图表表中生成选定单元格范围的位图,并在所述位置生成单独的scrt.png文件。
Sub Macro1()
myFileName = "scrt.png"
Range("G1:I12").Select
Selection.CopyPicture Appearance:=xlScreen, Format:=xlPicture
Charts.Add
ActiveChart.Paste
ActiveChart.Export Filename:=ThisWorkbook.Path & "\" & myFileName, Filtername:="PNG"
End Sub
非常感谢。不要使用图表工作表,而是在常规工作表上使用嵌入的图表对象-然后可以在粘贴到复制的范围图片之前调整其大小
Sub Tester()
ExportRange Selection, "C:\_Stuff\test\scrt.png"
End Sub
Sub ExportRange(rng As Range, sPath As String)
Dim cob, sc
rng.CopyPicture Appearance:=xlScreen, Format:=xlPicture
Set cob = rng.Parent.ChartObjects.Add(10, 10, 200, 200)
'remove any series which may have been auto-added...
Set sc = cob.Chart.SeriesCollection
Do While sc.Count > 0
sc(1).Delete
Loop
With cob
.Height = rng.Height
.Width = rng.Width
.Chart.Paste
.Chart.Export Filename:=sPath, Filtername:="PNG"
.Delete
End With
End Sub
不要使用图表工作表,而是在常规工作表上使用嵌入的图表对象-然后可以在粘贴到复制的范围图片之前调整其大小
Sub Tester()
ExportRange Selection, "C:\_Stuff\test\scrt.png"
End Sub
Sub ExportRange(rng As Range, sPath As String)
Dim cob, sc
rng.CopyPicture Appearance:=xlScreen, Format:=xlPicture
Set cob = rng.Parent.ChartObjects.Add(10, 10, 200, 200)
'remove any series which may have been auto-added...
Set sc = cob.Chart.SeriesCollection
Do While sc.Count > 0
sc(1).Delete
Loop
With cob
.Height = rng.Height
.Width = rng.Width
.Chart.Paste
.Chart.Export Filename:=sPath, Filtername:="PNG"
.Delete
End With
End Sub
当我按F8键逐行执行代码时,它工作得很好。但是当使用F5运行它时,我得到了一张空白图片。如何修复此问题?无法提供任何明确的信息-请尝试在粘贴之前插入对
DoEvents
的几个调用。非常感谢。我将DoEvents
放在一个从1到5的循环中,现在它运行良好。非常感谢。如何使其成为我的屏幕或浏览器页面,而不是工作表?当我按F8键逐行执行代码时,效果很好。但是当使用F5运行它时,我得到了一张空白图片。如何修复此问题?无法提供任何明确的信息-请尝试在粘贴之前插入对DoEvents
的几个调用。非常感谢。我将DoEvents
放在一个从1到5的循环中,现在它运行良好。非常感谢。我如何使其成为我的屏幕或浏览器页面而不是工作表?