2010-05-22 19 views
2

我有大約25個PowerPoint演示文稿,每個幻燈片至少有45張幻燈片。在每張幻燈片上有四個可能的答案和一個提示與問題相關的提示的幫助按鈕。每個答案和幫助按鈕都是一個啓動宏的PowerPoint動作按鈕。提取與附加到PowerPoint中的「操作」按鈕的宏關聯的VBA代碼

我正在嘗試將所有問題/答案/提示遷移到SQL數據庫中。在使用Excel和Word之前,我曾與Office.Interop一起工作過,並且我擁有充足的SQL數據庫經驗,所以我沒有預見到實際提取問題和答案的文本部分並將其放入數據庫中的任何問題。

我不知道該怎麼做是給一個幻燈片上的對象 - >獲取操作按鈕信息 - >獲取宏名稱 - >最後得到宏的vb代碼。從那裏我可以弄清楚如何解析出哪個是正確的答案,以及提示的文字是什麼。

任何幫助/想法將不勝感激。

回答

2

爲了讓您的項目的名稱運行宏設置,你會遇到這樣的事情:

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:要獲取TextRanges ActionSettings,請看下面:

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 

然後,您需要從最後一次For/Next循環內的VBE中搜索並提取該宏(以及其他任何您需要的內容)。

有一個few references on SO關於如何提取Excel/Word中的所有宏並使用VBProject模型 - 這些技術與PowerPoint完全相同。有關更好的示例,請參見Programmatically extract macro (VBA) code from Word 2007 docs。在Programming The VBA Editor上存在一個更全面的VBProject對象模型介紹。

+0

所以我想對於一個「正常」的情況,這將工作的偉大......我能夠用上面的方法爲線索提取宏的名稱,因爲它是自己單獨的操作按鈕。出於某種原因,問題和答案都是相同的形狀(文本塊)...所有的答案也是行動按鈕。我不確定這是如何工作的,有4個動作按鈕,都是鼠標點擊的形狀。我嘗試查詢幻燈片上的所有圖形,以確保它們不會隱藏在其他地方,但我找不到它們。有任何想法嗎? – Peter 2010-05-27 01:25:54

+0

@Patricker:這就是我的想法 - 這些動作按鈕與文本框分組在一起。我已經更新了上面的代碼,這將有助於獲得分組形狀的運行宏。 – 2010-05-27 04:44:37

+0

@Otaku ...看起來不像那樣。以下是重現我的確切問題的步驟:1)創建一個新的演示文稿。在文本框中輸入三行文字。 2)在演示文稿中添加一個宏。 3)在文本框中選中其中一行文本,然後轉到功能區上的插入選項卡,然後選擇「操作」。 4)選擇宏選項,然後從列表中選擇宏。 5)爲第三行重複此步驟(將第二行保留爲普通文本)。現在讓vba看到動作... – Peter 2010-05-28 03:01:14