VBA - Method "add" van Chart objecten is mislukt

stemmen
1

Ik probeer om een ​​functie die een deel van een blad zal een e-mail te creëren, met de onderstaande code:

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

Ik heb tijdelijk hardcoded het bereik ik wil snijden (ook al is het niet een probleem ... zou moeten zijn), en ik krijg de fout op deze regel:

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

Volledig fout:

Run-time error'-2147417878 (80010108) ': Methode 'Toevoegen' van object 'ChartObjects' mislukt

Kan iemand mij vertellen waar mijn fout is? Bijgewerkt 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
De vraag is gesteld op 19/09/2018 om 13:35
bron van user
In andere talen...                            


1 antwoorden

stemmen
1

De variabelen worden niet expliciet verklaard. Hoewel het een probleem hier niet moet zijn, zoals het newChartmoet worden beschouwd Variant, probeer te schrijven Dim newChart as ChartObjectop de lijn voor wbk.Activate.

Dan bellen afzonderlijk iets zo klein als deze:

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

En dan beginnen met het toevoegen Plage.Left, Plage.Top, Plage.Width, Plage.Heightin plaats van de hardcoded argumenten (100). Voeg vervolgens wbk.Worksheets(Namesheet)zo goed en te zien of het werkt.


Niet te verklaren variabelen is echt een slechte gewoonte. Dit werkt, als je alles verklaren. In deze specifieke klein voorbeeld, het probleem is de nameRangevariabele:

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 een volgende stap, overweeg dan het lezen van de documentatie voor Option Explicit:

antwoordde op 19/09/2018 om 13:58
bron van user

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