VBA - metoda „add“ a obiectelor diagramă a eșuat

voturi
1

Sunt încercarea de a crea o funcție care va trimite un email pentru o porțiune dintr-o foaie, cu codul de mai jos:

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

Am hardcoded temporar intervalul vreau să taie (chiar dacă nu ar trebui să fie o problemă ...), și I a lua de eroare de pe această linie:

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

Eroare completă:

Run-time error'-2147417878 (80010108) : Metoda 'Adăugați' obiectului 'ChartObjects' a eșuat

Ar putea cineva să-mi spui unde e greșeala mea? Cod Actualizat:

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
Întrebat 19/09/2018 la 13:35
sursa de către utilizator
În alte limbi...                            


1 răspunsuri

voturi
1

Variabilele nu sunt declarate în mod explicit. Deși nu ar trebui să fie o problemă, deoarece newChartar trebui să fie considerat Variant, încercați să scrie Dim newChart as ChartObjectpe linia înainte wbk.Activate.

Apoi, separat de asteptare ceva la fel de mici ca acesta:

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

Și apoi începe adăugarea în Plage.Left, Plage.Top, Plage.Width, Plage.Heightloc de argumente (100) cu valori exacte. Apoi se adaugă la wbk.Worksheets(Namesheet)fel de bine și a vedea dacă funcționează.


Nu declararea variabilelor este într - adevăr o practică proastă. Aceasta funcționează, dacă declarați toți. În acest exemplu specific mic, problema este nameRangevariabila:

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

Ca un pas următor, ia în considerare citirea documentației pentru Opțiunea Explicit:

Publicat 19/09/2018 la 13:58
sursa de către utilizator

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