VBA公式存入变量后写入活动单元格触发运行时错误'1004'
VBA公式写入报错(Run-time error '1004')解决方案
直接报错原因
你拼接公式字符串时,单元格引用格式完全错误:把列字母和行号用冒号分隔(比如Q:2),这是Excel无法识别的无效地址,正确的单元格地址格式应为「列字母+行号」(比如Q2)。同时,公式里的<>是HTML转义字符,VBA中直接写<>即可。
修正后的公式代码
将原公式行替换为:
myFormula = "=IF(AND(" & wsSold_As_BOM_Comp_Column & wsSold_As_BOM_Comp_Row & "=""Yes""," & wsPrice_Column & wsPrice_Row & "<>""""), ""Error"", """"")"
额外优化建议(避免后续报错)
- 禁用Select/Activate操作:这类方法依赖当前活动单元格/工作表,极易因操作顺序变化导致错误,直接通过对象引用操作单元格。例如:
' 代替Range("A1").Select + wsHeader_Row = ActiveCell.Row wsHeader_Row = Worksheets("MI Create").Range("A1").Row - 不要用索引引用工作簿:
Workbooks(2)的索引会随打开顺序改变,改用Workbooks.Open返回的对象:Dim wbTemplate As Workbook my_FileName = Application.GetOpenFilename(FileFilter:="Excel Files,*.xl*;*.xm*") If my_FileName <> False Then Set wbTemplate = Workbooks.Open(Filename:=my_FileName) End If ' 后续直接通过wbTemplate操作目标工作表 - 给Find方法加错误处理:如果找不到指定的表头文本,
Activate会触发报错,先检查查找结果:Dim findCell As Range Set findCell = Rows(wsHeader_Row).Find(What:="Media Type*", LookIn:=xlFormulas, LookAt:=xlPart, MatchCase:=False) If Not findCell Is Nothing Then ' 执行后续逻辑,比如获取列字母 wsMedia_Type_Column = Split(findCell.Address, "$")(1) Else MsgBox "未找到「Media Type」表头" Exit Sub End If
内容的提问来源于stack exchange,提问作者Theoden
相关产品推荐
相关产品推荐

