VBA运行时错误1004:二次运行代码触发应用程序定义错误求助
问题分析与解决
核心问题根源
你的代码过度依赖Select/Activate和ActiveCell/Selection,这类操作极易受Excel当前环境(比如同事打开了其他工作簿、切换了工作表)影响,第二次运行时当前激活的对象可能偏离预期,导致引用错误。另外,第一次运行后的数据清除或表格状态变化也可能触发引用失效。
修复后的代码(规避Select/Activate)
''Clear earlier data Dim salesSheet As Worksheet Set salesSheet = WB.Sheets("Sales by customer sheet") salesSheet.Range("A3:XFD1048576").ClearContents ''YTD Delivered With salesSheet '写入UNIQUE公式并直接转值 .Range("B3").Formula2R1C1 = "=UNIQUE(Sales_by_Customer_Table[name])" Dim uniqueRange As Range Set uniqueRange = .Range("B3", .Range("B3").End(xlDown)) uniqueRange.Value = uniqueRange.Value '替代复制粘贴转值操作 '写入SUMIFS公式并自动填充 .Range("C3").FormulaR1C1 = _ "=SUMIFS(Sales_by_Customer_Table[delivery_amount],Sales_by_Customer_Table[delivery_date],"">=""&DATE(YEAR(TODAY()),1,1),Sales_by_Customer_Table[delivery_date],""<=""&TODAY(),Sales_by_Customer_Table[name],RC[-1])" .Range("C3").AutoFill Destination:=.Range("C3", .Range("B3").End(xlDown).Offset(0, 1)) End With
额外排查点
- Excel版本兼容性:确认同事的Excel版本支持
UNIQUE函数(需Excel 365/2021及以后版本),若版本过低,可能出现首次运行临时生效、二次运行报错的情况。 - 表格名称一致性:检查同事电脑中
Sales_by_Customer_Table表格的名称是否和你的完全一致(注意大小写、空格),VBA对表格名称的引用受环境影响。 - 工作簿对象
WB的定义:确保WB在代码中是明确指向目标工作簿的对象,而非依赖ActiveWorkbook——二次运行时当前激活的工作簿可能已变更。
内容的提问来源于stack exchange,提问作者Kuljeet Keshav
相关产品推荐
相关产品推荐

