0

我正在生成 Excel PowerView 仪表板。我认为这对于只希望快速查看仪表板屏幕截图的用户很有用,并带有一个链接,更多分析人员可以在该链接中下载 excel 文件以重新透视或深入了解他们的内心满足。

我找到了一个宏,可以让我捕获屏幕截图并将其保存到本地文件,但屏幕截图是我的整个桌面或活动应用程序。这两个看起来都很糟糕,我只需要捕获 PowerView(见下图):在此处输入图像描述

有什么方法可以只从 VBA 捕获屏幕的某些部分?

4

1 回答 1

0

蟋蟀....

好的,我最终想通了:

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

第 2 步)在 VBE 中注册参考(工具 -> 参考 -> 找到 ImageMagick 并启用它)

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

步骤 4) 在 VBA 中创建以下宏,并将其分配给快速启动栏上的按钮。

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 选项卡中捕获范围。xlBitmap另外,如果您使用的是 ImageMagick,请确保使用它,因为它无法识别xlPicture(不是位图)。[1]:https ://www.imagemagick.org/script/download.php

于 2015-10-07T11:44:37.003 回答