Извлечь код VBA, связанный с макросом, прикрепленным к кнопке «Действие» в PowerPoint. - PullRequest
2 голосов
/ 22 мая 2010

У меня около 25 презентаций PowerPoint, каждая из которых содержит не менее 45 слайдов. На каждом слайде есть вопрос с четырьмя возможными ответами и кнопкой справки, которая дает подсказку, относящуюся к вопросу. Каждый из ответов и кнопка справки - это кнопка PowerPoint Action, которая запускает макрос.

Я пытаюсь перенести все вопросы / ответы / подсказки в базу данных SQL. Я работал с Office.Interop и раньше, когда работал с Excel и Word, и у меня достаточно опыта работы с БД SQL, поэтому я не предвижу никаких проблем с фактическим извлечением текстовой части вопроса и ответа и помещением ее в базу данных.

То, что я понятия не имею, как сделать, это дать объект на слайде -> получить информацию о кнопке действия -> Получить имя макроса -> и, наконец, получить код VB макроса. Оттуда я могу выяснить, как разобрать, какой правильный ответ и каков текст подсказки.

Любая помощь / идеи будут с благодарностью.

1 Ответ

2 голосов
/ 22 мая 2010

Чтобы получить название ваших предметов Запустите настройки макроса, вы запустите что-то вроде этого:

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

ОБНОВЛЕНИЕ: Чтобы получить ActionSettings для TextRanges, пожалуйста, найдите ниже:

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

Затем вы захотите найти и извлечь этот макрос (и все, что вам нужно) из VBE внутри последнего цикла For / Next.

На SO имеется несколько ссылок о том, как извлечь все макросы в Excel / Word и работать с моделью VBProject - методы идентичны PowerPoint. См. Программно извлекать код макроса (VBA) из документов Word 2007 для одного из лучших примеров. Более подробное введение в объектную модель VBProject существует в Программирование Редактор VBA .

...