To menu popup trong EXCEL
Mc đích: To menu popup khi người dùng Right-Click khi chut
trong vùng làm vic ca mt worksheet.
Gi s workbook ca tôi có mt worksheet, thì trong ví d ca tôi có
hai đon mã. Đon th nht nm trong Module VBA: PopupMenu và
đon mã th hai nm trong module worksheet: workhere
Đây là đon mã trong module VBA PopupMenu:
Option Explicit
Public Const gc_Title = "PopUp Menu Demo"
Public gcBar_RgtClkMenu As CommandBar
'' ***************************************************************************
'' Mc đích : Gi hàm để to popup menu người dùng
''
Sub RunMeToGetThingsGoing()
Set gcBar_RgtClkMenu = CreateSubMenu
End Sub
'' ***************************************************************************
'' Hàm để to popup menu
''
Function CreateSubMenu() As CommandBar
''Đặt tên chopopup menu
Const lcon_PuName = "PopUpDemo"
''To các đối tượng cho popup menu
Dim cb As CommandBar
Dim cbc As CommandBarControl
''Chc chn rng popup menu không tn ti
DeleteCommandBar lcon_PuName
''Thêm popup menu người dùng cho tp hp (collection) CommandBars
Set cb = CommandBars.Add(Name:=lcon_PuName, Position:=msoBarPopup, MenuBar:=False,
Temporary:=False)
'' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
'' Thêm vào th mt 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
'' ***************************************************************************
'' Mc đích : Kim tra nếu command bar có tên menuName
'' Nếu nó tn ti 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
Đây là đon mã trong worksheet module: workhere
Option Explicit
'' ***************************************************************************
'' Mc đích : Nó s được kích hot 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
''Hin popup menu người dùng
gcBar_RgtClkMenu.ShowPopup
Worksheet_BeforeRightClick_Resume:
''Nhm ngăn chn popup menu mc định ca Excel
Cancel = True
''Thoát khi th tc
Exit Sub
Worksheet_BeforeRightClick_Error:
''Nếu macro khi to chưa chy
''Hi người dùng có mun chy 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
Ln đầu khi bn Right Click thì bn s nhn được thông báo sau:
Sau đó nếu bn chn Yes thì bn s nhn được thông báo sau:
Cui cùng bn th Right Click li thì bn s nhn được popup menu sau:
Chúc các bn thành công. Hy vng bài viết trên s giúp ích các bn phn nào.