Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Excel VBA中获取屏幕截图并保存在单独的文件中_Vba_Excel_Screenshot - Fatal编程技术网

在Excel VBA中获取屏幕截图并保存在单独的文件中

在Excel VBA中获取屏幕截图并保存在单独的文件中,vba,excel,screenshot,Vba,Excel,Screenshot,我正试图通过在后台单击带有VBA代码的按钮,直接从excel工作表自动生成小屏幕截图。情况如下: 我必须拍摄cellrange G1:I12的屏幕截图,并将其保存在文件名中 称为scrt.png。屏幕截图的大小应该与cellrange G1:I12的大小完全相同 在前面的一篇文章中,我发现了这段代码,它首先将所提到范围的屏幕截图包含到一个新的图表中,然后成功地将scrt.png文件保存在所提到的位置。实际上,它成功地在图表表中生成选定单元格范围的位图,并在所述位置生成单独的scrt.png文件。

我正试图通过在后台单击带有VBA代码的按钮,直接从excel工作表自动生成小屏幕截图。情况如下:

我必须拍摄cellrange G1:I12的屏幕截图,并将其保存在文件名中 称为scrt.png。屏幕截图的大小应该与cellrange G1:I12的大小完全相同

在前面的一篇文章中,我发现了这段代码,它首先将所提到范围的屏幕截图包含到一个新的图表中,然后成功地将scrt.png文件保存在所提到的位置。实际上,它成功地在图表表中生成选定单元格范围的位图,并在所述位置生成单独的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的循环中,现在它运行良好。非常感谢。我如何使其成为我的屏幕或浏览器页面而不是工作表?