You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Target对象中使用Defined Name替代单元格地址?

问题原因
  • 访问Target.Name报错的核心原因:只有当Target对应的单元格本身是某个定义名称的唯一引用对象时,该属性才会正常返回值,否则会直接抛出运行时错误,这个属性不适合用来做范围匹配判断。
  • If Not Intersect(Target, [Test]) Is Nothing Then写法报错的常见原因:[Test]是Evaluate("Test")的语法糖,若Test是工作簿级名称、或引用范围不在当前工作表、或Evaluate返回结果不是Range类型时,就会触发类型不匹配错误。
修正后的代码

同时修复了原代码中事件开关可能永久关闭的问题:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim testRng As Range
    ' 错误捕获,避免异常导致事件永久关闭
    On Error GoTo ErrHandler
    
    Application.EnableEvents = False
    
    ' 显式获取定义名称Test对应的Range,避免方括号语法的隐式问题
    ' 如果Test是全局工作簿级名称,用下面这句
    Set testRng = ThisWorkbook.Names("Test").RefersToRange
    ' 如果Test是当前工作表专属的名称,换成下面这句
    ' Set testRng = Me.Names("Test").RefersToRange
    
    ' 用Intersect判断范围匹配
    If Not Intersect(Target, testRng) Is Nothing Then
        [Quarter_Select].Value = Target.Value
    End If
    
ExitHandler:
    ' 无论是否报错都恢复事件开关
    Application.EnableEvents = True
    Exit Sub
ErrHandler:
    ' 可按需自行添加错误提示逻辑
    Resume ExitHandler
End Sub
额外注意事项
  • 原代码仅在满足判断条件时才恢复Application.EnableEvents = True,如果判断不成立事件开关会一直处于关闭状态,后续所有工作表事件都会失效,修正代码中增加了统一的退出恢复逻辑,避免该问题。
  • 如果Test定义名称引用的是多单元格范围,当前的Intersect判断逻辑也可以正常兼容,不需要额外修改。

内容的提问来源于stack exchange,提问作者Leedo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 06:09:03