Lấy tên của menu khi click chuột phải

Liên hệ QC

blue_green

Thành viên mới
Tham gia
4/11/08
Bài viết
9
Được thích
0
Xin chào mọi người,

Mình đã tạo menu khi click chuột phải (hình đính kèm).
Giờ mình muốn lấy tên (.Caption) của các button trong menu khi click vào button đó.

Ví dụ khi click vào button "Sub menu 3" thì sẽ lấy được chuỗi "Sub menu 3"

Mục đích: số lượng các Sub menu là không cố định. Vì vậy mình sẽ cho chúng chạy chung 1 macro có parameter là tên của Sub menu.

Xin cảm ơn nhiều.

contextmenu.png
 
Bạn thực hiện đơn giản như sau:
Tạo Sub có tên ReCallContextMenu

Gán vào các Button trong Menu "Main Menu" với phương thức .OnAction
.OnAction = "'" & ThisWorkbook.Name & "'!ReCallContextMenu"

Tham khảo tại đây
--------------------
Code Ví dụ:
PHP:
Sub ReCallContextMenu()
    Dim Caller1%, Caller2%
    Caller1 = Application.Caller(1) 'Trả về thứ tự của Button trong CommandBars("MenuName").Controls'
    Caller2 = Application.Caller(2) 'Trả về thứ tự của Menu Cha trong CommandBars Controls'
    'PopupMainMenu.Controls.Item(Caller1).Caption'
    'Hoặc'
    Select Case Caller1
    Case 0: Call SubMenu1
    Case 1: Call SubMenu2
    End Select
End Sub
 
Upvote 0
Đơn giản thôi. Có thể truyền trực tiếp 1, 2, 10, ... parameter. Code sau đây là truyền 1 parameter.
Mã:
.OnAction = "'MySecretMacroName 1'"
...
.OnAction = "'MySecretMacroName 2'"
...
.OnAction = "'MySecretMacroName 3'"

Sub MySecretMacroName(ByVal index As Long)
    MsgBox "Menu " & index & " da duoc chon"
    Select Case index
        Case 1:
        Case 2:
        Case 3:
    End Select
End Sub

hoặc vd.
Mã:
.OnAction = "'MySecretMacroName " & .index & "'"
...
.OnAction = "'MySecretMacroName " & .index & "'"
...
.OnAction = "'MySecretMacroName " & .index & "'"

Sub MySecretMacroName(ByVal index As Long)
    MsgBox "Menu " & index & " da duoc chon"
    Select Case index
        Case 2:
        Case 3:
        Case 4:
    End Select
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Hoặc thử thêm cách nửa.
Mã:
.OnAction = "'" & ThisWorkbook.Name & "'!" & "On_Action"
Sub On_Action()
    Msgbox CommandBars.ActionControl.Caption
End Sub
 
Upvote 0
Web KT
Back
Top Bottom