代码在ThisWorkbook中工作,但不在Personal.xlsb中

我的笔记本电脑上的两个Shift键都卡住了很多,我通常在Excel中使用ctrl + page进行导航时,偶然在Excel中编辑组表单。

一个朋友给了我一个代码,我可以粘贴在VBA的ThisWorkbook,但是,我有很多的Excel文件。 他给出的代码(下面)将撤消我的组编辑,并将取消select除了其他工作表之外的所有工作表。 我想知道是否有一种方法可以在Personal.xlsb上工作,这样我就不必将这些代码粘贴到我的所有文件中。

(我想感谢先进的,我的互联网连接是相当薄弱的,所以我可能无法立即回应,但感谢您的帮助!)

Private Sub Workbook_SheetChange(ByVal sh As Object, ByVal Target As Range) If ActiveWindow.SelectedSheets.Count > 1 Then Application.EnableEvents = False Dim x As Integer x = MsgBox("This will undo previous action taken. Do you want to continue?", vbYesNo, "Confirmation") If x = vbYes Then Application.Undo Else End If ActiveSheet.Select Application.EnableEvents = True End If End Sub Private Sub Workbook_SheetSelectionChange(ByVal sh As Object, ByVal Target As Range) If ActiveWindow.SelectedSheets.Count > 1 Then Application.EnableEvents = False ActiveSheet.Select Application.EnableEvents = True End If End Sub 

在Personal.xlsb中的新类模块clsAppEvents中:

 Option Explicit Private WithEvents App As Application Private Sub Class_Initialize() Set App = Application End Sub Private Sub App_SheetChange(ByVal Sh As Object, ByVal Target As Range) Debug.Print "Changed sheet '" & Sh.Name & "' in workbook '" & Sh.Parent.Name & "'" If ActiveWindow.SelectedSheets.Count > 1 Then Application.EnableEvents = False Dim x As Integer If MsgBox("This will undo previous action taken. Do you want to continue?", _ vbYesNo, "Confirmation") = vbYes Then Application.Undo End If ActiveSheet.Select Application.EnableEvents = True End If End Sub Private Sub App_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) Debug.Print "Selection on sheet '" & Sh.Name & "' in workbook '" & Sh.Parent.Name & "'" If ActiveWindow.SelectedSheets.Count > 1 Then Application.EnableEvents = False ActiveSheet.Select Application.EnableEvents = True End If End Sub 

在一个常规的代码模块中:

 Option Explicit Dim oApp As clsAppEvents Sub InitAppEvents() Set oApp = New clsAppEvents End Sub 

或者,您可以将其放在ThisWorkbook代码模块中,并将其链接到Workbook_Open事件。

运行InitAppEvents将开始捕获在类模块中处理的事件。

注意:导致你的VBA项目被重置的任何东西(例如编辑代码或未处理的错误)意味着你将需要重置捕获事件的类实例,即重新运行InitAppEvents