استخراج رمز VBA المرتبط بماكرو متصل بزر إجراء في PowerPoint

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

  •  04-10-2019
  •  | 
  •  

سؤال

لديّ حوالي 25 عرضًا تقديميًا ، ولكل منها 45 شريحة على الأقل. في كل شريحة ، يوجد سؤال يحتوي على أربع إجابات محتملة وزر مساعدة يوفر تلميحًا ذا صلة بالسؤال. كل من الإجابات وزر المساعدة هو زر عمل PowerPoint الذي يطلق ماكرو.

أحاول ترحيل جميع الأسئلة/الإجابات/التلميحات إلى قاعدة بيانات SQL. لقد عملت مع Office.Interop من قبل عند العمل مع Excel و Word ولدي الكثير من تجربة SQL DB ، لذلك لا أتوقع أي مشكلات في استخراج جزء النص فعليًا من السؤال والإجابة ووضعه في DB.

ما ليس لدي أي فكرة عن كيفية القيام به هو إعطاء كائن على شريحة -> احصل على معلومات زر الإجراء -> احصل على اسم الماكرو -> وأخيراً احصل على رمز VB الخاص بالماكرو. من هناك يمكنني معرفة كيفية تحليل ما هو الإجابة الصحيحة وما هو نص التلميح.

أي مساعدة/أفكار سيكون موضع تقدير كبير.

هل كانت مفيدة؟

المحلول

للحصول على اسم العناصر الخاصة بك ، قم بتشغيل إعدادات الماكرو ، ستقوم بتشغيل شيء من هذا القبيل:

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 داخل الحلقة الأخيرة لـ/Next.

هناك بعض المراجع على ذلك حول كيفية استخراج جميع وحدات الماكرو في Excel/Word والعمل مع نموذج VBProject - تقنيات متطابقة مع PowerPoint. نرى استخراج برمجيا رمز الماكرو (VBA) من مستندات Word 2007 لأحد أفضل الأمثلة. يوجد مقدمة أكثر شمولاً لنموذج كائن VBProject في برمجة محرر VBA.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top