VBA - Metodo "aggiungere" degli oggetti grafico non è riuscita

voti
1

Sto tentando di creare una funzione che e-mail una parte di un foglio, con il codice qui sotto:

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

Ho temporaneamente hardcoded la gamma voglio tagliare (anche se non dovrebbe essere un problema ...), e ottengo l'errore su questa linea:

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

Errore di completa:

Di run-time error'-2147417878 (80010108) ': Metodo 'Add' dell'oggetto 'ChartObjects' fallito

qualcuno potrebbe dirmi dove il mio errore è? codice aggiornato:

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
È pubblicato 19/09/2018 alle 13:35
fonte dall'utente
In altre lingue...                            


1 risposte

voti
1

Le variabili non sono esplicitamente dichiarati. Anche se non dovrebbe essere un problema qui, come newChartdovrebbe essere considerato Variant, cercare di scrivere Dim newChart as ChartObjectsulla linea prima wbk.Activate.

Poi chiamando a parte qualcosa di piccolo come questo:

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

E poi iniziare ad aggiungere Plage.Left, Plage.Top, Plage.Width, Plage.Heightal posto degli argomenti hardcoded (100). Quindi aggiungere wbk.Worksheets(Namesheet)come bene e vedere se funziona.


Non la dichiarazione delle variabili è davvero una cattiva pratica. Questo funziona, se si dichiara tutto. In questo specifico piccolo esempio, il problema è la nameRangevariabile:

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

Come passo successivo, prendere in considerazione la lettura della documentazione per Option Explicit:

Risposto il 19/09/2018 a 13:58
fonte dall'utente

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