如何通过VBA / Excel捕获其他工作簿中的右键单击事件
将以下代码添加到Excel中的ThisWorkbook对象后,可以成功捕获当前工作簿中的任何工作表上的右键单击。
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) MsgBox "OK" End Sub
但是,如果可以从其他工作簿中捕获右键单击事件,可否请您提出build议?
案件
有一个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
问题
通过代码(1) ,popup式菜单已成功添加到新的Excel工作簿中。 不幸的是,右键单击任何新的Excel工作簿时,不能调用代码(3) 。 因此,我无法根据单元格中的值更新popup式菜单。
有没有办法使它工作? 谢谢。
更新
Mat's Mug的build议效果很好。 任何信贷都应该去马特杯。
以下是我的工作代码基于马克杯的build议。 希望对困扰这个问题的人们有所帮助
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”例程后,右键单击现在可以更新所有工作簿的工作表上的popup式菜单。