2017-08-30 28 views
0

我在VBA代碼中遇到了一個問題。我想要做的是創建一個chartObject,將圖表添加到我的工作表中並將圖像粘貼到其中。VBA設置的運行時錯誤1004 chartObject = myWS.Chartobjects.Add(0,0,100,100)

到目前爲止我的代碼如下:

Function RangeToImage(sheetName As String, rangeToBeExported As String) 

    Dim exportRange As Range 
    Dim fName As String: fName = sheetName & getConstNameForRange(rangeToBeExported) 
    Dim cObject As ChartObject 'ChartObject 
    Dim myChart As Chart 
    Dim myWB As Workbook, myWS As Worksheet 

    Set myWB = Application.ActiveWorkbook 
    Set myWS = myWB.Worksheets(sheetName) 

    myWS.Activate 
    ActiveWindow.DisplayGridlines = False 

    Call goToThisRange(myWS.Cells(1, 1)) 

    Set exportRange = Worksheets(sheetName).Range(rangeToBeExported) 
    ActiveWindow.DisplayGridlines = False 
    exportRange.CopyPicture Appearance:=xlScreen, Format:=xlPicture 

    Set cObject = myWS.ChartObjects.Add(0, 0, 100, 100) 
    cObject.Width = exportRange.Width 
    cObject.Height = exportRange.Height 
    cObject.Activate 

    Set myChart = cObject.Chart 
    myChart.Paste 
    myChart.Export getSpeicherort(fName) & IMAGEFORMATEXT, IMAGEFORMAT 
    myChart.Parent.Delete 

End Function 

然而,線

Set cObject = myWS.ChartObjects.Add(0, 0, 100, 100) 

拋出

運行時錯誤1004:應用程序定義或對象定義的錯誤

我完全失去了這個,有什麼我在這裏失蹤或誤解?

任何幫助,非常感謝!

+0

如果紙張保護 –

+0

你會得到這個錯誤我跑了簡化版本的代碼,它工作正常,根本沒有錯誤,所以我不認爲這行代碼是問題。然後按照Tim Williams的建議保護表單,並在該行代碼中得到同樣的錯誤。 –

+0

設置myWS = myWB.Worksheets(belegIdString):你沒有定義belegIdString –

回答

0

感謝@TimWilliams和@TonyM的意見,我的代碼現在可以使用。運行時錯誤1004被拋出,因爲該表仍然受到保護。

所以我添加

myWS.Unprotect 

myWS.Protect 

下面的代碼:

Function RangeToImage(sheetName As String, rangeToBeExported As String) 

    Dim exportRange As Range 
    Dim fName As String: fName = sheetName & getConstNameForRange(rangeToBeExported) 
    Dim cObject As ChartObject 'ChartObject 
    Dim myChart As Chart 
    Dim myWB As Workbook, myWS As Worksheet 

    Set myWB = Application.ActiveWorkbook 
    Set myWS = myWB.Worksheets(sheetName) 

    myWS.Unprotect 

    myWS.Activate 
    ActiveWindow.DisplayGridlines = False 

    Call goToThisRange(myWS.Cells(1, 1)) 

    Set exportRange = Worksheets(sheetName).Range(rangeToBeExported) 
    ActiveWindow.DisplayGridlines = False 
    exportRange.CopyPicture Appearance:=xlScreen, Format:=xlPicture 

    Set cObject = myWS.ChartObjects.Add(0, 0, 100, 100) 
    cObject.Width = exportRange.Width 
    cObject.Height = exportRange.Height 
    cObject.Activate 

    Set myChart = cObject.Chart 
    myChart.Paste 
    myChart.Export getSpeicherort(fName) & IMAGEFORMATEXT, IMAGEFORMAT 
    myChart.Parent.Delete 

    myWS.Protect  

End Function