Извлечь код VBA, связанный с макросом, прикрепленным к кнопке действий в PowerPoint
-
04-10-2019 - |
Вопрос
У меня около 25 презентаций PowerPoint, каждая как минимум 45 слайдов. На каждом слайде это вопрос с четырьмя возможными ответами и кнопкой справки, которая предоставляет подсказку актуально к вопросу. Каждый из ответов и кнопка справки - кнопка действия PowerPoint, которая запускает макрос.
Я пытаюсь перенести все вопросы / ответы / намеки в базу данных SQL. Я работал с Office.inerop до того, как при работе с Excel и Word, и у меня есть много опыта SQL DB, поэтому я не предвижу какие-либо проблемы с фактически извлечения текстовой части вопроса и ответа и помещают его в БД.
То, что я понятия не имею, как сделать, это дает объект на слайд -> получить кнопку действия info -> Получить имя макроса -> и, наконец, получите код VB Macro. Оттуда я могу выяснить, как разбирать, какой правильный ответ и какой текст подсказки.
Любая помощь / идеи были бы очень оценены.
Решение
Чтобы получить имя ваших товаров, запустите настройки макроса, вы запускаете что-то вроде этого:
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
ОБНОВИТЬ: Чтобы получить действия для 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 внутри последнего для / следующего цикла.
Есть а несколько ссылок на так О том, как извлечь все макросы в Excel / Word и работать с моделью VBPROJECT - методы идентичны PowerPoint. Видеть Программно извлечь код Macro (VBA) из Docs Word 2007 Для одного из лучших примеров. Существует гораздо более полное введение объекта VBPROJECT объекта Программирование редактора VBA.