Extraire le code VBA associé à une macro attachée à un bouton d'action dans PowerPoint

StackOverflow https://stackoverflow.com/questions/2888472

  •  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é.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top