为何Excel VBA代码仅选中MapLookup_RO工作表时正常,切换则失效?
问题描述
现有一段VBA代码:
With Worksheets("MapLookup_RO") For c1 = 1 To c1end Range("F4:F4").Copy Range("F" & Rows.Count).End(xlUp).Offset(1, 0) Next c1 Application.Wait (Now + TimeValue("0:00:02")) ActiveWorkbook.Save End With
- 手动选中
MapLookup_RO工作表时,代码可正常执行复制操作; - 切换到其他工作表后运行代码,复制命令失效;
- 代码位于独立子过程中(非工作表代码模块),用于被其他子过程调用实现模块化。
解决方案
修改代码,给With块内的所有Range和Rows对象加上前缀.,明确指定它们的父工作表为MapLookup_RO:
With Worksheets("MapLookup_RO") For c1 = 1 To c1end .Range("F4:F4").Copy .Range("F" & .Rows.Count).End(xlUp).Offset(1, 0) Next c1 Application.Wait (Now + TimeValue("0:00:02")) ActiveWorkbook.Save End With
原因说明
- VBA中如果不明确指定
Range的父对象,默认会指向当前活动工作表; - 原代码里的
Range("F4:F4")和Range("F" & Rows.Count)...都没有绑定到With语句指定的工作表,所以当活动工作表不是MapLookup_RO时,复制操作会在当前活动表执行,而非目标表,表现为“复制命令无法生效”; - 加上
.后,Range和Rows会明确关联到With块中的MapLookup_RO工作表,无论当前活动表是什么,都会在目标表执行操作。
内容的提问来源于stack exchange,提问作者Raf Finiert
相关产品推荐
相关产品推荐

