将所有图表导出为PNG

时间:2011-11-07 18:11:17

标签: 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

单击按钮时,似乎没有任何事情发生。

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

那么,如何迭代未嵌入工作表中的图表?

2 个答案:

答案 0 :(得分: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

记录中,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

非常欢迎评论/建议。

答案 1 :(得分:1)

到目前为止,最简单的导出方法之一可能是将整个工作簿保存为网页。然后,Excel会自动将您的图表转换为PNG&#39>