基于Worksheet_Change事件的行隐藏/显示:名称管理器变量失效问题
VBA名称管理器变量在Worksheet_Change事件中的使用问题
原正常运行代码
If Range("B5") = ("Consult Fee 549") Or Range("B6") = "Consult Fee 632" Then Range("A1").EntireRow.Hidden = False Else Range("A1").EntireRow.Hidden = True End If
问题场景
将硬编码文本替换为名称管理器中定义的Consult_Fee_1和Consult_Fee_2后,修改后的代码片段如下:
If Range("B5") = ("Consult_Fee_1") Or Range("B6") = "Consult_Fee_2" Then
此时Range("B5")与Consult_Fee_1的判断失效,但Range("B6")与Consult_Fee_2的判断看似正常工作,疑问:是否无法在Range()判断中使用名称管理器定义的变量?
问题原因与解决方案
不是不能用名称管理器的变量,问题出在你给名称变量加了双引号:VBA会把带双引号的"Consult_Fee_1"识别成字面量字符串,而不是去调用名称管理器里定义的变量值。
正确写法是去掉双引号,直接引用名称变量:
If Range("B5") = Consult_Fee_1 Or Range("B6") = Consult_Fee_2 Then Range("A1").EntireRow.Hidden = False Else Range("A1").EntireRow.Hidden = True End If
补充说明:
- 名称管理器中定义的变量,在VBA中可直接作为值引用,无需加引号;加引号会被当成普通字符串,自然无法匹配变量对应的实际值。
- 你观察到
Consult_Fee_2的判断正常,大概率是因为单元格B6的内容恰好就是字符串"Consult_Fee_2",而非Consult_Fee_2变量对应的实际值,属于巧合性的误判。
内容的提问来源于stack exchange,提问作者Søren Karkov
相关产品推荐
相关产品推荐

