Extraire le code VBA associé à une macro attachée à un bouton d'action dans PowerPoint
-
04-10-2019 - |
Question
J'ai environ 25 présentations PowerPoint, chacun avec au moins 45 diapositives. Sur chaque diapositive est une question avec quatre réponses possibles et un bouton d'aide qui fournit une indication pertinente à la question. Chacune des réponses et le bouton d'aide est un bouton d'action PowerPoint qui lance une macro.
Je cherche à migrer toutes les questions / réponses / conseils dans une base de données SQL. J'ai travaillé avec Office.Interop avant lorsque vous travaillez avec Excel et Word et j'ai beaucoup d'expérience SQL DB, donc je ne prévois pas de problèmes avec l'extraction en fait la partie de texte de la question et la réponse et de le mettre dans la db.
Ce que je ne sais pas comment faire est donné un objet sur une diapositive -> obtenir l'information bouton d'action -> Obtenez le nom de la macro -> et enfin obtenir le code vb de la macro. De là, je peux comprendre comment analyser sur ce qui est la bonne réponse et ce que le texte de l'indice est.
Toute aide / idées serait grandement apprécié.
La solution
Pour obtenir le nom de vos articles les paramètres macro Exécuter, vous tomberez quelque chose comme ceci:
Sub ActionSettingName()
Dim p As Presentation
Set p = ActivePresentation
Dim s As Slide
Dim sh As Shape
Dim macroName As String
For Each s In p.Slides
For Each sh In s.Shapes
If sh.Type = msoGroup Then
Dim gs As Shape
For Each gs In sh.GroupItems
PrintMacroName gs
Next
Else
PrintMacroName sh
End If
Next
Next
End Sub
Sub PrintMacroName(sh As Shape)
If sh.ActionSettings(ppMouseClick).Action = ppActionRunMacro Then
macroName = sh.ActionSettings(ppMouseClick).Run
Debug.Print macroName
End If
End Sub
Mise à jour: Pour obtenir ActionSettings pour TextRanges, s'il vous plaît trouvez ci-dessous:
Sub ActionSettingName()
Dim p As Presentation
Set p = ActivePresentation
Dim s As Slide
Dim sh As Shape
For Each s In p.Slides
For Each sh In s.Shapes
Dim tr As TextRange
Set tr = sh.TextFrame.TextRange
Dim macroName As String
For i = 1 To tr.Runs.Count
macroName = tr.Runs(i).ActionSettings(ppMouseClick).Run
If Len(macroName) > 0 Then
Dim runText As String
runText = tr.Runs(i).Text
Debug.Print "RUN: " & runText & vbCrLf & "MACRO: " & macroName
End If
Next
Next
Next
End Sub
Ensuite, vous aurez envie de rechercher et d'extraire cette macro (et tout autre besoin de vous) de la VBE dans la dernière boucle For / Next.
Il y a peu de références sur SO sur la façon d'extraire toutes les macros dans Excel / Word et travailler avec les modèle VBProject - les techniques sont identiques à PowerPoint. Voir macro Programmatically (VBA) à partir de Word 2007 docs pour l'un des meilleurs exemples. Une introduction beaucoup plus complète au modèle d'objet VBProject existe Programmation éditeur VBA.