Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.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/4/macos/9.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 如何捕获PowerView图像?_Excel_Vba_Screenshot_Powerview - Fatal编程技术网

Excel 如何捕获PowerView图像?

Excel 如何捕获PowerView图像?,excel,vba,screenshot,powerview,Excel,Vba,Screenshot,Powerview,我正在生成Excel PowerView仪表板。我认为这对于那些只想快速查看仪表板屏幕截图的用户来说是很有用的,他们可以通过一个链接将excel文件下载到repivot,或者深入到他们满意的地方 我找到了一个宏,它允许我捕获屏幕截图并将其保存到本地文件,但屏幕截图是我的整个桌面或活动应用程序。这两个看起来都很糟糕,我只需要捕获PowerView,请参见下图: 有没有办法只从VBA捕获屏幕的某些部分?蟋蟀 好吧,我终于明白了: 步骤1在计算机上安装[Imagemagick][1]。确保包含COM组

我正在生成Excel PowerView仪表板。我认为这对于那些只想快速查看仪表板屏幕截图的用户来说是很有用的,他们可以通过一个链接将excel文件下载到repivot,或者深入到他们满意的地方

我找到了一个宏,它允许我捕获屏幕截图并将其保存到本地文件,但屏幕截图是我的整个桌面或活动应用程序。这两个看起来都很糟糕,我只需要捕获PowerView,请参见下图:

有没有办法只从VBA捕获屏幕的某些部分?

蟋蟀

好吧,我终于明白了:

步骤1在计算机上安装[Imagemagick][1]。确保包含COM组件,以便可以从VBA使用它

步骤2:在VBE工具->引用->查找ImageMagick并启用它中注册引用

步骤3关闭excel并重新打开它

步骤4:在VBA中创建以下宏,并将其指定给quicklaunch栏上的按钮

Sub AltPrintScreen()
Dim a, b

    ' First, take a screenshot and save it
    a = Replace(ActiveWorkbook.Name, ".xlsx", "")
    Set b = ActiveWorkbook
    keybd_event VK_MENU, 0, 0, 0
    keybd_event VK_SNAPSHOT, 0, 0, 0
    keybd_event VK_SNAPSHOT, 0, KEYEVENTF_KEYUP, 0
    keybd_event VK_MENU, 0, KEYEVENTF_KEYUP, 0

    Dim chtObj As ChartObject

    With b.Worksheets(1)

    .Activate
    
    ' My resolution is 1366 x 768, adjust this part as per ur rez
    Set chtObj = .ChartObjects.Add(100, 30, 1000, 568)
    chtObj.Name = "TemporaryPictureChart"

    ActiveSheet.ChartObjects("TemporaryPictureChart").Activate
    ActiveChart.Paste

    ActiveChart.Export Filename:=ThisWorkbook.Path & "\" & a & ".jpg", FilterName:="jpg"
End With
chtObj.Delete

'Next, use ImageMagick to crop the image to get only the part you want.
Dim img
Set img = CreateObject("ImageMagickObject.MagickImage.1")
img.Convert ThisWorkbook.Path & "\" & a & ".jpg", "-crop", "845x645+270+62^", "+repage", ThisWorkbook.Path & "\" & a & ".jpg"
Set img = Nothing
Sheets("Power View1").Activate
    
End Sub
第5步,然后,从要截屏的工作表中,单击运行宏的小按钮。虽然您可能需要调整参数,但这应该可以做到

旁注:直接从屏幕截图转到ImageMagick要容易得多,如下所示:

Dim a, img
a = Replace(ActiveWorkbook.Name, ".xlsx", "")
Selection.CopyPicture xlScreen, xlBitmap
Set img = CreateObject("ImageMagickObject.MagickImage.1")
img.Convert "clipboard:myimage", "-crop", "845x645+270+62^", "+repage", ThisWorkbook.Path & "\" & a & ".jpg"
但不幸的是,您无法在PowerView选项卡中捕获范围。此外,如果使用ImageMagick,请确保使用xlBitmap,因为它无法识别xlPicture而不是位图。 [1] :