TẠO MENU POPUP TRONG EXCEL
Option Explicit
Public Const gc_Title = "PopUp Menu Demo"
Public gcBar_RgtClkMenu As CommandBar
'' ***************************************************************************
'' Mục đích : Gọi hàm để tạo popup menu người dùng
''
Sub RunMeToGetThingsGoing()
Set gcBar_RgtClkMenu = CreateSubMenu
End Sub
'' ***************************************************************************
'' Hàm để tạo popup menu
''
Function CreateSubMenu() As CommandBar
''Đặt tên chopopup menu
Const lcon_PuName = "PopUpDemo"
''Tạo các đối tượng cho popup menu
Dim cb As CommandBar
Dim cbc As CommandBarControl
''Chắc chắn rằng popup menu không tồn tại
DeleteCommandBar lcon_PuName
''Thêm popup menu người dùng cho tập họp (collection) CommandBars
Set cb = CommandBars.Add(Name:=lcon_PuName, Position:=msoBarPopup, MenuBar:=False, Temporary:=False)
'' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
'' Thêm vào thử một số controls
Set cbc = cb.Controls.Add
With cbc
.Caption = "&Control 1"
.OnAction = "DummyMessage"
End With
Set cbc = cb.Controls.Add
With cbc
.Caption = "Control &2"
.OnAction = "DummyMessage"
End With
'' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Set CreateSubMenu = cb
End Function
'' ***************************************************************************
'' Mục đích : Kiểm tra nếu command bar có tên menuName
'' Nếu nó tồn tại thì xóa đi
''
Sub DeleteCommandBar(menuName)
Dim mb
For Each mb In CommandBars
If mb.Name = menuName Then
CommandBars(menuName).Delete
End If
Next
End Sub
Sub DummyMessage()
MsgBox "Hello", vbInformation + vbOKOnly, gc_Title
End Sub
Option Explicit
'' ***************************************************************************
'' Mục đích : Nó sẽ được kích hoạt khi người dùng right click
''
Private Sub Worksheet_BeforeRightClick(ByVal Target As Excel.Range, Cancel As Boolean)
On Error GoTo Worksheet_BeforeRightClick_Error
''Hiện popup menu người dùng
gcBar_RgtClkMenu.ShowPopup
Worksheet_BeforeRightClick_Resume:
''Nhằm ngăn chặn popup menu mặc định của Excel
Cancel = True
''Thoát khỏi thủ tục
Exit Sub
Worksheet_BeforeRightClick_Error:
''Nếu macro khởi tạo chưa chạy
''Hỏi người dùng có muốn chạy bây giờ không
If vbYes = MsgBox("You need to run the macro ""RunMeToGetThingsGoing"" before this demo will work" _
& vbCrLf & vbCrLf & "Run it now?", vbQuestion + vbYesNo, gc_Title) Then
''User clicked "Yes", so run it
RunMeToGetThingsGoing
MsgBox "Now try again", vbInformation + vbOKOnly, gc_Title
End If
''Thoát
Resume Worksheet_BeforeRightClick_Resume
End Sub
Lần đầu khi bạn Right Click thì bạn sẽ nhận được thông báo sau:

Sau đó nếu bạn chọn Yes thì bạn sẽ nhận được thông báo sau:

Cuối cùng bạn thử Right Click lại thì bạn sẽ nhận được popup menu sau:

Chúc các bạn thành công. Hy vọng bài viết trên sẽ giúp ích các bạn phần nào.
Mọi góp ý của các bạn xin gởi cho tôi theo địa chỉ email sau:
PcLeHoan
1996 - 2002
Mirror :
http://www.pclehoan.com
Mirror :
http://www.lehoanpc.net
Mirror :
http://www.ktlehoan.com