VBA - Methode „add“ von Chart Objekte fehlgeschlagen

stimmen
1

Ich versuche, eine Funktion zu erstellen, die einen Teil eines Blattes, mit dem folgenden Code E-Mail wird:

Function PictureToHTML(wbk, Namesheet, nameRange, imgFile)

    wbk.Activate
    Worksheets(Namesheet).Activate

    nameRange = C7:C10

    Set Plage = wbk.Worksheets(Namesheet).Range(nameRange)
    Plage.CopyPicture

    TempFilePath = Environ$(temp) & \ & imgFile

    Set newchart = wbk.Worksheets(Namesheet).ChartObjects.Add(Plage.Left, Plage.Top, Plage.Width, Plage.Height)

    With newchart
        .Activate
        .Chart.parent.Border.LineStyle = 0
        .Chart.Paste
        .Chart.Export TempFilePath, PNG
    End With
    Worksheets(Namesheet).ChartObjects(Worksheets(Namesheet).ChartObjects.Count).Delete
    Set Plage = Nothing

    PictureToHTML = <br><B> & Namesheet & :</B><br> _
                & <img src='cid: & imgFile & '>

End Function

Ich habe vorübergehend den Bereich Ich möchte fest einprogrammiert schneiden (auch wenn es kein Problem sein sollte ...), und ich erhalte den Fehler auf dieser Linie:

Set newchart = wbk.Worksheets(Namesheet).ChartObjects.Add(Plage.Left, Plage.Top, Plage.Width, Plage.Height)

Voll Fehler:

Laufzeit error'-2147417878 (80010108) ': Methode 'Hinzufügen' des Objekts 'Chartobjects' failed

Könnte mir jemand sagen, wo mein Fehler ist? Aktualisiert Code:

Function PictureToHTML(wbk, Namesheet, nameRange, imgFile)

    Dim WeightsSheet As Worksheet
    Dim newChart As ChartObject
    wbk.Activate

    Set WeightsSheet = wbk.Worksheets(Namesheet)

    Set Plage = wbk.Worksheets(Namesheet).Range(nameRange)
    Plage.CopyPicture

    TempFilePath = Environ$(temp) & \ & imgFile
    Set newChart = WeightsSheet.ChartObjects.Add(Plage.Left, Plage.Top, Plage.Width, Plage.Height)

    With newChart
        .Activate
        .Chart.parent.Border.LineStyle = 0
        .Chart.Paste
        .Chart.Export TempFilePath, PNG
    End With
    WeightsSheet.ChartObjects(WeightsSheet.ChartObjects.Count).Delete
    Set Plage = Nothing

    PictureToHTML = <br><B> & Namesheet & :</B><br> _
                & <img src='cid: & imgFile & '>

End Function
Veröffentlicht am 19/09/2018 um 13:35
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
1

Die Variablen werden nicht explizit deklariert. Auch wenn es hier kein Problem sein sollte, da die in newChartBetracht gezogen werden sollte Variant, versuchen zu schreiben , Dim newChart as ChartObjectbevor sie auf der Linie wbk.Activate.

Dann ruft separat etwas so klein wie diese:

Sub TestMe()
    Dim newChart As ChartObject
    Set newChart = Worksheets(1).ChartObjects.Add(100, 100, 100, 100)
End Sub

Und dann beginnen Hinzufügen Plage.Left, Plage.Top, Plage.Width, Plage.Heightanstelle der fest codierten Argumente (100). Dann fügen Sie wbk.Worksheets(Namesheet)so gut und sehen , ob es funktioniert.


Nicht Variablen deklarieren ist wirklich eine schlechte Praxis. Dies funktioniert, wenn Sie alle erklären. In diesem speziellen kleinen Beispiel, das Problem ist die nameRangeVariable:

Option Explicit

Sub TestMe()
    Debug.Print PictureToHTML(ThisWorkbook, "Sheet1", Range("A1:E20"), "probably.png")
End Sub

Function PictureToHTML(wbk As Workbook, Namesheet As String, _
                        nameRange As Range, imgFile As String) As String

    Dim WeightsSheet As Worksheet
    Dim newChart As ChartObject
    Dim Plage As Range
    Dim tempFilePath As String

    Set WeightsSheet = wbk.Worksheets(Namesheet)

    Set Plage = wbk.Worksheets(Namesheet).Range(nameRange.Address)
    Plage.CopyPicture

    tempFilePath = Environ$("temp") & "\" & imgFile
    Set newChart = WeightsSheet.ChartObjects.Add( _
                        Plage.Left, Plage.Top, Plage.Width, Plage.Height)

    With newChart
        .Chart.Parent.Border.LineStyle = 0
        .Chart.Paste
        .Chart.Export tempFilePath, "PNG"
    End With

    WeightsSheet.ChartObjects(WeightsSheet.ChartObjects.Count).Delete
    PictureToHTML = "<br><B>" & Namesheet & ":</B><br>" & "<img src='cid:" & imgFile & "'>"

End Function

Als nächsten Schritt sollten Sie die Dokumentation für die Option Lesen Explicit:

Beantwortet am 19/09/2018 um 13:58
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more