使用Target.Address的有效替代方法

And*_*tin 7 excel vba

我目前正在使用Target.Address来识别双击单元格的时间并运行一段代码以将用户带到显示该单元格中包含的信息的相关工作表.

因此,例如,如果某个单元格表示3个系统尚未执行某种操作,则如果用户单击该单元格,则会将其视为这3个系统的内容.

目前,我这样做:

If Target.Address = "$B$20" Then
    Win2KTrackerIncompleteFilter (strEngUnits(9))
ElseIf Target.Address = "$C$20" Then
    Win2KTrackerIncompleteFilter (strEngUnits(0))
ElseIf Target.Address = "$D$20" Then
    Win2KTrackerIncompleteFilter (strEngUnits(1))
etc
Run Code Online (Sandbox Code Playgroud)

我把大部分代码放在一个小函数中,所以这似乎可以正常工作.但是,如果我要第20 行上方插入一个新行(来自上面的示例),则所有这些引用都将指向错误的位置.我以为我可以通过删除绝对引用($符号)来处理这个问题,但这只会破坏机制.

任何人都可以建议我如何能够a)重写代码以使其更有效率; b)保护代码,以便插入新行,代码将记住它指向哪些行/列并相应地更新自身.

小智 7

在电子表格中选择一个单元格并为其命名

例如,B3现在已命名 myCell

在此输入图像描述

并稍微编辑您的脚本以使用这样的命名范围

Dim namedRange As Name
If Target.Address = Me.Range("myCell").Address Then
       Win2KTrackerIncompleteFilter (strEngUnits(9))
ElseIf ...
    ...
End If
Run Code Online (Sandbox Code Playgroud)

因此,即使您插入新行,名称也会.RefersTo自动更新其属性,您无需触摸脚本.

  • 而不是循环,我使用`If Target.Address = Me.Range("myCell").在Sheet模块中的Address Then`或`If Target.Address = sh.Range("myCell").在工作簿中的Address Then`模块. (2认同)