如何在整个工作簿范围下制作Worksheet_SelectionChange?

时间:2016-03-18 20:18:50

标签: excel vba

我想使用VBA来获取活动单元格的值。通过在线搜索,我找到了以下代码。

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

但是,我必须将这些代码放在表格#34; sheet1"之下。如果我有三张纸,sheet1, sheet2, and sheet3,我需要复制上面的代码,并分别粘贴在这三张纸下,稍作修改。

有什么方法我不需要将代码放在单独的表格中(可能只是在ThisWorkbook下),而无论哪张表被激活,我仍然可以得到activecell的值。

由于

1 个答案:

答案 0 :(得分:4)

您想要的是@ScottCraner said in a comment:在SheetSelectionChange中使用Workbook类型的ThisWorkbook事件。

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

use the dropdowns!

从下拉列表中选择SheetSelectionChange将生成此处理程序:

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下,我收到了编译错误:程序声明与具有相同名称的事件或程序的描述不匹配。 < / p>