จะทราบได้อย่างไรว่าแมโครใดถูกกำหนดให้กับปุ่มแถบเครื่องมือบางอันใน Word 2003


1

ฉันมีแถบเครื่องมือ Word 2003 ที่สร้างโดยบุคคลอื่นมานานแล้ว แถบเครื่องมือประกอบด้วยปุ่มจำนวนมากและมาโครที่ได้รับมอบหมาย

จนถึงตอนนี้ฉันสามารถตั้งค่าเบรกพอยต์ในรหัส VBA เพื่อหาว่าแมโครใดที่ทำงานอยู่ แต่สำหรับปุ่มเดียวในแถบเครื่องมือของฉันฉันมีปัญหา ดูเหมือนว่าจะไม่มีมาโครที่เกี่ยวข้อง เมื่อฉันคลิกที่ปุ่มแถบเครื่องมือ Word จะพูดว่า "ไม่พบมาโคร ... ") กลยุทธ์การค้นหาเบรกพอยต์ของฉันดูเหมือนจะไม่ใช่แนวคิดการชนะที่นี่

ฉันรู้เรื่องนี้ดีมาก: เมนูเครื่องมือ & gt; ปรับแต่ง & gt; คลิกขวาที่ปุ่มแถบเครื่องมือเฉพาะ:

Tools menu > Customize > Right click on the specific toolbar button

น่าเสียดายที่นี่ไม่ได้ช่วยอะไรฉัน ฉันสามารถดูคุณสมบัติเหตุการณ์การโทรกลับสำหรับปุ่มแถบเครื่องมือได้หรือไม่? ฉันจำเป็นต้องรู้มาโครว่ามีปุ่มใดที่ตั้งใจจะให้ทำงาน

คำตอบ:


1

พิมพ์ชื่อแมโครทั้งหมดที่กำหนดให้กับปุ่มเมนูใด ๆ

Sub ReadBack_Buttons()
    On Error Resume Next        
    '## Loop through every menu bar
    For Each bar In Application.CommandBars        
        '## Loop through every button on the current menu bar
        For Each button In bar.Controls            
            '## If a macro is assigned, print it out
            If button.OnAction <> "" Then Debug.Print button.Caption & " = " & button.OnAction                
            '## Loop through every button on dropdown menus
            For Each subbutton In button.Controls                
                '## If a macro is assigned, print it out
                If subbutton.OnAction <> "" Then Debug.Print subbutton.Caption & " = " & subbutton.OnAction                    
            Next
        Next
    Next
End Sub

สำหรับการทดสอบอย่างรวดเร็วให้เพิ่มเมนูกำหนดเองของคุณด้วยมาโครที่สองนี้

Sub CreateCommandBar()
    On Error Resume Next        
'## Delete the commandbar if it exists
    Application.CommandBars("example").Delete       
'## Create a new Command Bar
    Set bar = CommandBars.Add(Name:="example", Position:=msoBarFloating)
    bar.Visible = True       
'## Add popup menu
    Set menu1 = bar.Controls.Add(Type:=msoControlPopup)
    menu1.Caption = "My custom menu"       
'## Add button 1 to popup menu
    Set Btn2 = menu1.Controls.Add(Type:=msoControlButton)
    Btn2.Caption = "missing macro assigned"
    Btn2.OnAction = "Not_working_dummy"       
'## Add button 2 to popup menu
    Set Btn2 = menu1.Controls.Add(Type:=msoControlButton)
    Btn2.Caption = "Hello World"
    Btn2.OnAction = "Hello_world"        
End Sub

Sub Hello_world()
    MsgBox "Hey, it works"
End Sub

หลังจากที่คุณดำเนินการแล้ว CreateCommandBar คุณจะเห็นรายการใหม่ในเมนูหลักของคุณ หนึ่งที่ได้รับมอบหมายแมโครการทำงานและหนึ่งโดยไม่ต้อง

enter image description here

ตอนนี้ให้เรียกใช้แมโครแรก ReadBack_Buttons และดูที่บานหน้าต่างทันที

missing macro assigned = Not_working_dummy  
Hello World = Hello_world

อืม ... วิธีนี้ใช้ได้กับแถบเครื่องมือด้วย ( CommandBar ) ทำในเวลาออกแบบหรือไม่ (ฉันหมายถึง: การใช้เครื่องมือออกแบบแถบเครื่องมือ โปรแกรม Word 2003 ?) ฉันมีสิทธิ์เข้าถึงรหัส VBA ทั้งหมดใน โปรแกรม Word 2003 แบบ น่าเสียดายที่ไม่มีอะไรเหมือน CommandBars(index).Controls.xxx
Hauns TM

@ HaunsTM โอ้ขอโทษฉันสับสน Excel และ Word แก้ไขและหาทางออกที่ดีกว่า หวังว่านี่จะช่วยได้
nixda
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.