Extraer el código VBA asociado con un macro unido a un botón de acción en PowerPoint

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

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

¿Fue útil?

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 .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top