2017-07-25 2 views
0

Je sais que cette question a déjà été posée et répondue à plusieurs reprises, mais malheureusement, ne peut pas trouver de solution de travail. Donc, j'ai une présentation très simple dans PowerPoint (juste une diapositive avec un graphique qui a été créé à partir du tableau Excel) et besoin de mettre à jour avec des données récentes via VBA, quel que soit le script Excel ou PowerPoint.Mise à jour graphique PowerPoint en utilisant VBA

D'abord, j'ai essayé de PowerPoint le script le plus évident:

Sub update1() 
ActivePresentation.UpdateLinks 
End Sub 

Il semble fonctionner, mais n'a pas modifié. Ensuite, j'ai commencé à chercher des solutions sur le web et trouver, par exemple, topic on StackOverflow.

Pour une réponse par Optimistic Busy il fonctionne sans erreur et me donne une sortie dans MessageBox, mais il ne change rien dans le graphique PowerPoint.

Pour une réponse par rinusp il me donne une erreur

Erreur d'exécution '91': variable objet ou variable bloc non définie

sur la ligne

For each sld in myPresentation.Slides 

J'ai essayé toutes ces macros dans PowerPoint.

J'ai également essayé des réponses d'autres questions sur StackOverflow, mais malheureusement rien ne fonctionne pour moi. Je serai heureux si quelqu'un m'aide à trouver une solution de travail - ne importe pas d'Excel ou de PowerPoint si le script VBA doit être exécuté.

Merci d'avance.

MISE À JOUR: Je suis en train de mettre à jour ma question avec des exemples complets de code que j'ai essayé de lancer. Ces exemples ont été fournis par les utilisateurs Optimistic Busy et rinusp sur le sujet StackOverflow mentionné ci-dessus.

Ce code lorsqu'il est exécuté à partir de PowerPoint me donne une erreur « Erreur d'exécution « 91 »: Variable objet ou variable bloc fixe pas »

Sub update2() 

Dim myPresentation As PowerPoint.Presentation 
Dim sld As PowerPoint.Slide 
Dim shp As PowerPoint.Shape 
Dim myChart As PowerPoint.Chart 

For Each sld In myPresentation.Slides 
    For Each shp In sld.Shapes 
     If shp.HasChart Then 
      Set myChart = shp.Chart 
      myChart.ChartData.Activate 
      myChart.Refresh 
     End If 
    Next 
Next 

End Sub 

et ce code fonctionne sans erreurs et donne une sortie en boîte de message, mais ne met pas à jour le graphique

Sub update3() 
Dim sld As Slide, shp As Shape 

For Each sld In ActivePresentation.Slides 

    For Each shp In sld.Shapes 
    On Error Resume Next 
    shp.LinkFormat.Update 
    Next 

Next 

MsgBox ("Update chart") 

End Sub 
+0

Salut, pouvez-vous poster le code complet que vous essayez de travailler. L'erreur semble être liée à ne pas avoir une référence à l'objet avec lequel vous interagissez. –

+0

@RyanWildry, j'ai mis à jour ma question avec des exemples complets de code. – Hasek

Répondre

1

Si vous exécutez macro dans PowerPoint et que votre graphique est lié, ce code fonctionnera.

Sub update2() 

Dim myPresentation As PowerPoint.Presentation 
Dim sld As PowerPoint.Slide 
Dim shp As PowerPoint.Shape 
Dim myChart As PowerPoint.Chart 
Dim Wb As Object 
Dim App As Object 

Set myPresentation = ActivePresentation 

For Each sld In myPresentation.Slides 
    For Each shp In sld.Shapes 
     If shp.HasChart Then 
      Set myChart = shp.Chart 
      myChart.ChartData.Activate 
      myChart.Refresh 
      Set Wb = myChart.ChartData.Workbook 
      Set App = Wb.Application 
      Wb.Close (0) 
     End If 
    Next 
Next 
App.Quit 
End Sub 
+0

Merci, cela fonctionne. Pouvez-vous également expliquer comment devrait-il être modifié si je veux mettre à jour le graphique avec des données d'une autre table (dans un autre fichier Excel) avec la structure similaire à l'original? – Hasek

+0

@Hasek, Vous pouvez dans un autre fichier Excel. –