Extrahieren Sie den VBA-Code im Zusammenhang mit einem Makro an eine Aktionstaste in Powerpoint
-
04-10-2019 - |
Frage
Ich habe etwa 25 Powerpoint-Präsentationen, die jeweils mit mindestens 45 Dias. Auf jeder Folie ist eine Frage mit vier möglichen Antworten und einer Hilfe-Taste, die einen Hinweis für die Frage stellt. Jede der Antworten und die Hilfe-Taste ist eine Powerpoint-Aktionstaste, dass startet ein Makro.
Ich versuche, alle Fragen / Antworten / Hinweise in eine SQL-Datenbank zu migrieren. Ich habe mit Office.Interop gearbeitet, bevor, wenn sie mit Excel und Word arbeiten, und ich habe viele SQL DB Erfahrung, so sehe ich keine Probleme mit tatsächlich dem Textteil der Frage und Antwort zu extrahieren und sie in den db setzen.
Was habe ich keine Ahnung, wie ein Objekt auf einer Folie zu tun gegeben -> erhalten die Info Aktionstaste -> Holen Sie sich das Makroname -> und endlich das vb Code des Makros. Von dort aus kann ich herausfinden, wie aus zu analysieren, welche die richtige Antwort ist und was der Text des Hinweises ist.
Jede Hilfe / Ideen würden sehr geschätzt werden.
Lösung
Um den Namen erhalten Ihrer Artikel Makro-Einstellungen starten, werden Sie etwas wie folgt aus:
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
UPDATE: Um ActionSettings für TextRanges, bitte unten finden:
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
Dann werden Sie wollen für und Extrakt suchen, dass Makro (und alles, was Sie brauchen) von der VBE innerhalb der letzten For / Next-Schleife.
Es gibt ein wenige Hinweise auf SO , wie alle Makros in Excel / Word-extrahieren und die Arbeit mit der VBProject Modell - die Techniken zu Powerpoint identisch sind. Siehe Programmatically Extrakt Makro (VBA) Code aus Word 2007-Dokumente für eines der besseren Beispiele. Eine viel umfassenderen Einführung in das VBProject Objektmodell existiert unter Programmierung Der VBA-Editor .