2011-11-07 77 views
2

我試圖將我的Excel文件中的所有圖表導出爲PNG圖像。圖表並未嵌入工作表中,而是在創建時作爲新工作表移動將所有圖表導出爲PNG

不熟悉VBA或Office宏,我試着根據我在網上找到的代碼示例編寫一些東西,但沒有成功。

下面是我嘗試過,這可能與嵌入的工作表,圖表工作,但不是獨立的圖表:

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彈出,所以我很明顯,通過正確的對象(因此,沒有圖表所以什麼也沒發生)沒有迭代。

那麼,如何遍歷工作表中未嵌入的圖表?

回答

4

我找到了解決方案。我不得不使用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 

的意見/建議非常歡迎。

+0

請記住 - 您可以接受您自己的答案作爲解決方案。 –

+0

謝謝,但我相信2天后我只能接受我自己的答案。這是一件好事,因爲我不熟悉vba,並歡迎改進或更好的解決方案。 –

+0

對我來說很不錯... –

1

也許最簡單的出口方式之一是將整個工作簿保存爲網頁。 Excel會自動將您的圖表轉換爲PNG的