2010-05-22 5 views
2

J'ai environ 25 présentations PowerPoint, chacune avec au moins 45 diapositives. Sur chaque diapositive est une question avec quatre réponses possibles et un bouton d'aide qui fournit un indice pertinent à la question. Chacune des réponses et le bouton d'aide est un bouton d'action PowerPoint qui lance une macro. Je tente de migrer toutes les questions/réponses/conseils dans une base de données SQL. J'ai travaillé avec Office.Interop avant de travailler avec Excel et Word et j'ai beaucoup d'expérience SQL DB, donc je ne prévois pas de problèmes avec l'extraction de la partie texte de la question et la réponse et de le mettre dans la base de données. Ce que je ne sais pas comment faire est donné un objet sur une diapositive -> obtenir le bouton d'action info -> Obtenir le nom de la macro -> et enfin obtenir le code vb de la macro. De là, je peux comprendre comment analyser quelle est la bonne réponse et quel est le texte de l'indice.Extrait le code VBA associé à une macro attachée à un bouton d'action dans PowerPoint

Toute aide ou idée serait grandement appréciée.

Répondre

2

Pour obtenir le nom de vos articles les paramètres macro Exécuter, vous tomberez quelque chose comme ceci:

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 

MISE À JOUR: Pour ActionSettings pour TextRanges, s'il vous plaît trouver ci-dessous:

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 

Ensuite, vous devrez rechercher et extraire cette macro (et tout ce dont vous avez besoin) du VBE dans la dernière boucle For/Next.

Il existe un few references on SO sur comment extraire toutes les macros dans Excel/Word et travailler avec le modèle VBProject - les techniques sont identiques à PowerPoint. Voir Programmatically extract macro (VBA) code from Word 2007 docs pour l'un des meilleurs exemples. Une introduction beaucoup plus complète au modèle objet VBProject existe à Programming The VBA Editor.

+0

Donc je suppose que pour une situation "normale" cela fonctionnerait bien ... J'ai été capable d'utiliser la méthode ci-dessus pour extraire le nom de la macro pour l'indice car c'est son propre bouton d'action séparé. Pour une raison quelconque, la question et les réponses sont toutes dans la même forme (bloc de texte) ... et toutes les réponses sont aussi des boutons d'action. Je ne suis pas vraiment sûr de savoir comment cela fonctionne avec 4 boutons d'action qui sont tous les clics de souris dans la même forme. J'ai essayé d'interroger toutes les formes sur la diapositive juste pour m'assurer qu'elles ne se cachaient pas ailleurs mais je n'ai pas pu les trouver. Des idées? – Peter

+0

@Patricker: Voici ce que je pense - ces boutons d'action sont regroupés avec une zone de texte. J'ai mis à jour le code ci-dessus qui aidera à obtenir les macros d'exécution pour les formes groupées. –

+0

@Otaku ... ne ressemble pas à ça non plus. Voici les étapes à suivre pour reproduire mon problème: 1) créez une nouvelle présentation. Dans une zone de texte, tapez trois lignes de texte. 2) Ajoutez une macro à votre présentation. 3) Hissez l'une des lignes de texte à l'intérieur de la zone de texte, accédez à l'onglet Insertion sur le ruban et choisissez Action. 4) Choisissez l'option macro, puis choisissez la macro dans la liste. 5) répétez cette étape pour la troisième ligne (laissez la deuxième ligne comme texte normal). Maintenant, obtenir le vba pour voir l'action ... – Peter

Questions connexes