将所有图表导出为PNG

Sha*_*hin 3 excel vba excel-2007

我正在尝试将我的Excel文件中的所有图表导出为PNG图像.图表未嵌入工作表中,而是在创建时作为新工作表移动.

不熟悉VBA或办公室宏,我尝试根据我在网络上找到的代码示例将一些内容串联起来但没有成功.

这是我尝试过的,它可能适用于工作表中嵌入的图表,但不适用于独立图表:

Private Sub ExportChartsButton_Click()
    Dim outFldr As String
    Dim ws As Worksheet
    Dim co As ChartObject

    outFldr = GetFolder(ActiveWorkbook.Path) 
    For Each ws In ActiveWorkbook.Worksheets
        For Each co In ws.ChartObjects
            co.Export outFldr & "\" & ws.Name & ".png", "PNG"
        Next
    Next
End Sub
Run Code Online (Sandbox Code Playgroud)

单击按钮时,似乎什么也没发生.

如果我替换内部循环,MsgBox co.ChartObjects.Count我会得到0每个非图表工作表的弹出窗口,所以我很明显不会遍历正确的对象(因此,没有图表,所以没有任何反应).

那么,我如何遍历未嵌入工作表中的图表?

Sha*_*hin 5

我找到了解决方案.我不得不用ActiveWorkbook.Charts而不是.Worksheets.

Private Sub ExportChartsButton_Click()
    Dim outFldr As String
    Dim wc As Chart
    Dim co As ChartObject

    outFldr = GetFolder(ActiveWorkbook.Path)
    If outFldr = "" Then
        MsgBox "Export Cancelled"
    Else
        For Each wc In ActiveWorkbook.Charts
            wc.Export outFldr & "\" & wc.Name & ".png", "PNG"
        Next
    End If
End Sub
Run Code Online (Sandbox Code Playgroud)

并且为了记录,GetFolder()定义为:

Function GetFolder(strPath As String) As String
    Dim fldr As FileDialog
    Dim sItem As String
    Set fldr = Application.FileDialog(msoFileDialogFolderPicker)
    With fldr
        .Title = "Select folder to export Charts to"
        .AllowMultiSelect = False
        .InitialFileName = strPath
        If .Show = True Then sItem = .SelectedItems(1)
    End With
    GetFolder = sItem
    Set fldr = Nothing
End Function
Run Code Online (Sandbox Code Playgroud)

意见/建议非常欢迎.