将以下代码添加到Excel中的ThisWorkbook对象后,它可以成功捕获当前工作簿中任何工作表的右键单击 .
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
MsgBox "OK"
End Sub
但是,您能否建议是否可以从另一个工作簿中捕获右键单击事件?
Case
有一个xlam文件来存储VBA项目的所有脚本 . 在xlam文件的Thisworksheet对象中,我添加了以下事件
'1) add popmenu when open any new workbook
' It works fine
Private Sub Workbook_Open()
Call addPopMenu
End Sub
'2) delete popmenu when close a workbook
' It works fine
Private Sub WorkBook_Close()
Call deletePopMenu
End Sub
'3) Capture the right-click event before displaying popmenu
'It does not work
Private Sub Worksheet_BeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
'Call CheckPopMenu(Target) 'Aims to set the pop-menu based on the value in the cell
MsgBox "OK"
End Sub
Issue
通过代码(1)将弹出菜单成功添加到新的Excel工作簿中 . 不幸的是,右键单击任何新的Excel工作簿时无法调用代码(3) . 因此,我无法根据单元格中的值更新弹出菜单 .
反正有没有让它有效?谢谢 .
Update
Mat's Mug的建议效果很好 . 任何功劳都归功于Mat's Mug .
以下是基于Mat's Mug建议的工作代码 . 希望对困扰这个问题的人有所帮助
1)将以下“xAppClass”类模块添加到VBA项目中
Option Explicit
Public WithEvents ExcelAppEvents As Application
Private Sub Class_Initialize()
Set ExcelAppEvents = Application
End Sub
Private Sub ExcelAppEvents_sheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
Call CheckCellMenu(Target) 'replace with your own function
End Sub
2)将以下代码添加到模块中
Public exlApp As New xAppClass
3)在“ThisWorkbook”对象中,添加
Private Sub Workbook_Open()
Set exlApp = New xAppClass
End Sub
添加上面的代码并运行“Workbook_open”例程后,右键单击现在可以更新所有工作簿的工作表上的弹出菜单 .