Excel VBA中Evaluate函数问题:返回全零值
问题原因与解决方法
你遇到的问题核心是Evaluate方法的默认作用域是当前活动工作表,而非你指定的res工作表:
- 宏正常运行时,如果
res不是当前活动表,Evaluate(rngData.Address & "*2")会在活动工作表中查找对应地址的区域。若活动表该区域为空,计算结果就是0,赋值给rngData后自然全是零。 - 断点后你大概率会切换到
res工作表查看,此时活动表变为res,Evaluate能正确读取目标区域的数据,计算结果就正常了。
解决方法
直接使用目标工作表的Evaluate方法,明确指定计算上下文:
Set rngData = res.Range("A5:C" & last_row) rngData = res.Evaluate(rngData.Address & "*2")
更简洁高效的写法(无需先定义rngData再拼接地址):
res.Range("A5:C" & last_row) = res.Evaluate("A5:C" & last_row & "*2")
另外需确认last_row是基于res工作表计算的,比如:
last_row = res.Cells(res.Rows.Count, "A").End(xlUp).Row
避免因活动表不同导致last_row取值错误。
内容的提问来源于stack exchange,提问作者Kuempsmichi
相关产品推荐
相关产品推荐

