VBA - Méthode « ajouter » des objets de la carte a échoué

voix
1

Je tente de créer une fonction qui enverra par courrier électronique une partie d'une feuille, avec le code ci-dessous:

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

J'ai Hardcoded temporairement la gamme que je veux couper (même si elle ne devrait pas être un problème ...), et je reçois l'erreur sur cette ligne:

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

erreur complète:

Exécution error'-2147417878 (80010108) ': La méthode 'Ajouter ChartObjects '' d'objet' Failed

Quelqu'un pourrait-il me dire où est mon erreur? Code Mise à jour:

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
Créé 19/09/2018 à 13:35
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
1

Les variables ne sont pas explicitement déclarées. Bien qu'il ne devrait pas être un problème ici, comme newChartdoit être envisagée Variant, essayez d'écrire Dim newChart as ChartObjectsur la ligne avant wbk.Activate.

Puis appeler séparément quelque chose d'aussi petit que celui-ci:

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

Et puis commencer à ajouter au Plage.Left, Plage.Top, Plage.Width, Plage.Heightlieu des arguments hardcoded (100). Puis ajouter wbk.Worksheets(Namesheet)ainsi et voir si cela fonctionne.


Ne pas déclarer les variables est vraiment une mauvaise pratique. Cela fonctionne, si vous déclarez tous. Dans ce petit exemple précis, le problème est la nameRangevariable:

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

Dans une prochaine étape, envisager de lire la documentation pour l'option explicite:

Créé 19/09/2018 à 13:58
source utilisateur

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