插入含IFERROR与VLOOKUP的VBA公式时触发1004错误求助
VBA插入IFERROR+VLOOKUP公式时1004错误的解决方法
问题根源
- 循环语法错误:Else分支中
For i = 2 TotalRow缺少关键字To,触发运行时错误。 - 公式分隔符不匹配:Excel公式参数分隔符由系统区域决定,英文区域用逗号(
,),欧洲等区域用分号(;),原代码固定用分号可能与你的Excel设置冲突。 - 变量初始化缺失:未初始化
DNumber,若未找到"DRAFT"工作表会导致后续代码报错。
修正后的代码
GerçekStok = 0 Set StokBook = ActiveWorkbook Set BticinoBook = Workbooks("BTICINO.xlsm") NoS = BticinoBook.Sheets.Count DNumber = 0 ' 初始化变量,避免未找到工作表时出错 For k = 1 To NoS If BticinoBook.Sheets(k).Name = "DRAFT" Then DNumber = k Exit For End If Next k ' 检查是否找到目标工作表 If DNumber = 0 Then MsgBox "未找到名为DRAFT的工作表" Exit Sub End If TotalRow = BticinoBook.Sheets(DNumber).Cells(Rows.Count, 4).End(xlUp).Row ' 根据你的Excel区域设置选择分隔符,英文区域用逗号,欧洲区域用分号 Dim formulaSeparator As String formulaSeparator = "," ' 需调整为你Excel实际使用的分隔符 If GerçekStok = 0 Then For i = 2 To TotalRow BticinoBook.Sheets(DNumber).Cells(i, 2).Formula = "=IFERROR(VLOOKUP(D" & i & formulaSeparator & "'[" & StokBook.Name & "]Sheet2'!$A:$E" & formulaSeparator & "3" & formulaSeparator & "FALSE)," & Chr(34) & "0" & Chr(34) & ")" Next i Else ' 修复For循环的To关键字 For i = 2 To TotalRow BticinoBook.Sheets(DNumber).Cells(i, 2).Formula = "=IFERROR(VLOOKUP(D" & i & formulaSeparator & "'[" & StokBook.Name & "]Sheet2'!$A:$E" & formulaSeparator & "4" & formulaSeparator & "FALSE)," & Chr(34) & "0" & Chr(34) & ")" Next i End If
额外优化说明
- 增加了工作表存在性检查,避免因找不到"DRAFT"工作表导致后续操作失败。
- 将公式分隔符设为变量,方便根据系统区域快速调整。
- 使用
.Formula属性赋值公式,符合VBA操作单元格公式的规范写法。
内容的提问来源于stack exchange,提问作者Emre
相关产品推荐
相关产品推荐

