Estrarre il codice VBA associato con una macro collegato a un pulsante di azione in PowerPoint

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

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

È stato utile?

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 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top