如何使整个工作簿范围内的Worksheet_SelectionChange?

我想用VBA来获取活动单元格的值。 通过在线search,我find了下面的代码。

Private Sub Worksheet_SelectionChange(ByVal Target As Range) Sheets("sheet1").Range("Selection").Value = Cells(ActiveCell.Row, ActiveCell.Column).Value End Sub 

但是,我必须将这些代码放在“sheet1”表单中。 如果我有三个工作表, sheet1, sheet2, and sheet3 ,我需要复制上面的代码,并分别粘贴在这三个工作表,稍作修改。

有没有什么办法,我不需要把代码放在单独的工作表(也许在ThisWorkbook下),而我仍然可以得到活动单元的值,不pipe哪个表被激活。

谢谢

您想要的是@ScottCraner在评论中所说的内容 :在ThisWorkbook中使用Workbooktypes的SheetSelectionChange事件。

VBE在代码窗格编辑器中提供了下拉菜单,特别是为此。 您不能将事件处理程序从Worksheet对象复制/粘贴到Workbook对象中,并期望事情“正常工作” – 使用下拉列表并让VBE为您生成处理程序存根!

使用下拉菜单!

从下拉列表中selectSheetSelectionChange将生成这个处理程序:

 Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) End Sub 

正如你所看到的签名是不同的:

 Private Sub Worksheet_SelectionChange(ByVal Target As Range) End Sub 

事件处理程序必须遵守事件的签名 (而不仅仅是名称),否则会遇到错误:

@ ScottCraner如果我使用Workbook_SheetSelectionChange并把它放在ThisWorkbook下,我得到编译错误: 过程声明不匹配具有相同名称的事件或过程的描述。