Extraer el código VBA asociado con un macro unido a un botón de acción en PowerPoint
-
04-10-2019 - |
Pregunta
Tengo alrededor de 25 presentaciones de PowerPoint, cada uno con al menos 45 diapositivas. En cada diapositiva es una pregunta con cuatro posibles respuestas y un botón de ayuda que proporciona un indicio relevante para la cuestión. Cada una de las respuestas y el botón de ayuda es un botón de acción PowerPoint que lanza una macro.
Estoy tratando de migrar todas las preguntas / respuestas / consejos en una base de datos SQL. He trabajado con Office.Interop antes de la hora de trabajar con Excel y Word y tengo mucha experiencia en SQL DB, por lo que no preveo ningún problema con la extracción en realidad la parte de texto de la pregunta y la respuesta y ponerla en el PP.
Lo que no tengo ni idea de cómo hacerlo se da un objeto en una diapositiva -> obtener la información de botón de acción -> Obtener el nombre de la macro -> y, finalmente, obtener el código VB de la macro. Desde allí puedo encontrar la manera de analizar cuál es la respuesta correcta y lo que el texto de la pista es.
Cualquier ayuda / idea sería muy apreciada.
Solución
Para obtener el nombre de sus artículos funciona con ajustes de la Macro, se encontrará con algo como esto:
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
ACTUALIZACIÓN: Para obtener ActionSettings para TextRanges, por favor encuentran a continuación:
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
A continuación, usted querrá buscar y extracto de esa macro (y cualquier otra cosa que necesita) de la VBE dentro del último bucle For / Next.
Hay pocas referencias sobre SO sobre cómo extraer todas las macros en Excel / Palabra y el trabajo con el modelo VBProject - las técnicas son idénticas a PowerPoint. Ver extracto de macro (VBA) de Word 2007 documentos para uno de los mejores ejemplos. Una introducción mucho más amplio para el modelo de objetos VBProject existe en Programación El Editor de VBA .