VBA Worksheet_Change事件:无需Offset获取修改单元格地址的方法
无需使用Offset获取回车后修改单元格的地址
你的问题根源在于用了ActiveCell——按下回车后Excel会自动把光标跳到下方单元格,所以ActiveCell指向的是跳转后的单元格,而非你刚修改的那个。其实Worksheet_Change事件自带的Target参数就是被修改的单元格本身,直接用它就能解决问题,完全不需要Offset(-1,)。
修正后的代码如下:
Private Sub Worksheet_Change(ByVal Target As Range) Dim xTab As Worksheet Set xTab = ThisWorkbook.Worksheets("Report") ' 仅处理A列单个单元格的修改操作 If Not Intersect(Target, xTab.Range("A:A")) Is Nothing And Target.Count = 1 Then ' 输出被修改单元格的地址和对应值 Debug.Print "修改的单元格地址:" & Target.Address Debug.Print "修改后的值:" & Target.Value End If End Sub
关键说明:
Target是事件的核心参数,精准对应触发修改的单元格,不受回车后光标跳转的影响。- 把原代码的
Selection.Count替换为Target.Count,因为我们要判断的是被修改区域是否为单个单元格,比判断选区更准确。 - 移除了全局的
xTab变量,直接在事件内声明赋值,代码更简洁独立。
内容的提问来源于stack exchange,提问作者Manuel Mojica
相关产品推荐
相关产品推荐

