Estrarre il codice VBA associato con una macro collegato a un pulsante di azione in PowerPoint
-
04-10-2019 - |
Domanda
Ho circa 25 presentazioni in PowerPoint, ciascuno con almeno 45 diapositive. Su ogni diapositiva è una domanda con quattro possibili risposte e un pulsante di aiuto che fornisce un indizio rilevante per la domanda. Ognuna delle risposte e il pulsante di aiuto è un pulsante di PowerPoint azione che lancia una macro.
Sto tentando di migrare tutte le domande / risposte / suggerimenti in un database SQL. Ho lavorato con Office.Interop prima, quando si lavora con Excel e Word e ho molta esperienza SQL DB, quindi non prevedo alcun problema con realtà estrarre la parte di testo della domanda e risposta e la messa in db.
Quello che non ho idea di come fare è dato un oggetto in una diapositiva -> ottenere informazioni pulsante di azione -> Ottenere il nome della macro -> e, infine, ottenere il codice vb della macro. Da lì riesco a capire come analizzare quale sia la risposta corretta e che il testo del suggerimento è.
Qualsiasi aiuto / idee sarebbe molto apprezzato.
Soluzione
Per ottenere il nome dei tuoi articoli Eseguire impostazioni macro, si incorrerà qualcosa di simile:
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: Per ottenere ActionSettings per TextRanges, si riportano di seguito:
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
Allora ti consigliamo di cercare e estratto che macro (e quant'altro è necessario) dal VBE all'interno dell'ultimo ciclo For / Next.
Ci sono alcuni riferimenti su SO su come estrarre tutte le macro in Excel / Word e il lavoro con il modello VBProject - le tecniche sono identiche a PowerPoint. Vedi programmazione estratto macro (VBA) da Word 2007 docs per uno degli esempi migliori. Un intro molto più completo al modello a oggetti VBProject esiste a programmazione VBA Editor .