VBA中Autofill仅在调试器生效,点击按钮执行失效求助
问题分析与解决方案
你的代码在调试时正常、按钮运行时Autofill失效的核心原因是未明确指定Range对象所属的工作表。调试时你大概率是在"Insert Booking file"工作表界面操作,此时Range("AC2")默认指向当前活动表,所以能正常执行Autofill;但通过按钮运行时,活动工作表可能不是目标表,导致Autofill操作的是错误的工作表,自然看不到效果。
另外,你添加的全表复制粘贴值属于多余操作,不仅没解决问题,还会影响效率,建议移除。
修正后的代码
Sub CopyPricingID() Dim wsTarget As Worksheet Dim lr As Long ' 定义目标工作表,避免依赖活动表 Set wsTarget = ThisWorkbook.Sheets("Insert Booking file") ' 设置标题和初始值 wsTarget.Range("AC1").Value = "pricing_ID" wsTarget.Range("AC2").Value = ThisWorkbook.Sheets("Booking File").Range("I14").Value ' 查找目标表的最后一行(限定在目标表内查找) lr = wsTarget.Range("A1:AC1000").Find( _ What:="*", _ After:=wsTarget.Cells(1, 1), _ LookIn:=xlFormulas, _ LookAt:=xlPart, _ SearchOrder:=xlByRows, _ SearchDirection:=xlPrevious, _ MatchCase:=False _ ).Row ' 明确指定目标表的Range执行Autofill wsTarget.Range("AC2").AutoFill Destination:=wsTarget.Range("AC2:AC" & lr) MsgBox "Complete" End Sub
关键优化点
- 用
Set wsTarget = ThisWorkbook.Sheets("Insert Booking file")定义目标工作表,所有Range操作都通过wsTarget限定,彻底避免活动表切换带来的问题。 - 查找最后一行时,
After参数也指定了目标表的单元格,确保查找范围完全在目标表内。 - 移除了不必要的全表复制粘贴操作,直接通过Autofill完成填充,效率更高。
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

