我想使用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的值。
由于
答案 0 :(得分:4)
您想要的是@ScottCraner said in a comment:在SheetSelectionChange
中使用Workbook
类型的ThisWorkbook
事件。
VBE在代码窗格编辑器中提供了下拉列表,特别是为此。您不能只是将事件处理程序从Worksheet
对象复制/粘贴到Workbook
对象中,并期望“正常工作” - 使用下拉列表并让VBE为您生成处理程序存根! / p>
从下拉列表中选择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>