VBA - Method "legge til" i diagramobjekter mislyktes

stemmer
1

Jeg forsøker å lage en funksjon som vil sende en del av et ark, med koden under:

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

Jeg har midlertidig hardkodet området jeg ønsker å kutte (selv om det ikke burde være et problem ...), og jeg får feil på denne linjen:

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

Full feil:

Run-time error'-2147417878 (80010108) ': Metode 'Legg til' objekt ChartObjects misbrukt

Kan noen fortelle meg hvor min feil er? Oppdatert kode:

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
Publisert på 19/09/2018 klokken 13:35
kilden bruker
På andre språk...                            


1 svar

stemmer
1

Variablene er ikke eksplisitt deklarert. Selv om det ikke bør være et problem her, som newChartbør vurderes Variant, prøve å skrive Dim newChart as ChartObjectpå linjen før wbk.Activate.

Deretter ringer separat noe så lite som dette:

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

Og så begynne å legge Plage.Left, Plage.Top, Plage.Width, Plage.Heighti stedet for hardkodede argumenter (100). Deretter legger wbk.Worksheets(Namesheet)også, og se om det fungerer.


Ikke erklære variabler er virkelig en dårlig praksis. Dette fungerer, hvis du deklarerer alle. I dette spesifikke lite eksempel, er problemet nameRangevariabel:

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

Som et neste trinn, bør du vurdere å lese dokumentasjonen for Option Explicit:

Svarte 19/09/2018 kl. 13:58
kilden bruker

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