VBA - Método "añadir" de objetos Gráfico fallidos

votos
1

Estoy intentando crear una función que va a enviar por correo electrónico una parte de una hoja, con el código de abajo:

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

He hardcoded temporalmente el rango de Quiero cortar (aunque no debería ser un problema ...) y me sale el error en esta línea:

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

error completo:

En tiempo de ejecución error'-2147417878 (80010108) ': Método 'Añadir' del objeto 'ChartObjects' fallido

¿Alguien podría decirme dónde está mi error? código actualizado:

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
Publicado el 19/09/2018 a las 13:35
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
1

Las variables no se declaran explícitamente. A pesar de que no debería ser un problema aquí, como newChartdebe ser considerado Variant, trate de escribir Dim newChart as ChartObjecten la línea antes wbk.Activate.

A continuación, llamar por separado algo tan pequeño como éste:

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

Y luego empezar a añadir Plage.Left, Plage.Top, Plage.Width, Plage.Heighten lugar de los argumentos codificados (100). A continuación, añadir wbk.Worksheets(Namesheet)también y ver si funciona.


No declarar variables es realmente una mala práctica. Esto funciona, si se declara todo. En este pequeño ejemplo específico, el problema es la nameRangevariable de:

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

Como siguiente paso, considere la lectura de la documentación para la opción explícita:

Respondida el 19/09/2018 a las 13:58
fuente por usuario

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