Excel VBA表格列VLOOKUP公式运行时错误1004求助
解决VBA修改VLOOKUP公式时的1004错误
我帮你拆解下代码里导致错误的几个核心问题,逐一修正后就能正常运行了:
- VLOOKUP公式语法混乱:你写的公式开头多了一个多余的单引号
',结尾还少了闭合括号,而且VLOOKUP函数必须的第四个参数(精确/近似匹配)也缺失了——一般我们用FALSE做精确匹配,不写的话默认是近似匹配,很容易出异常。 - 字符串拼接逻辑错误:原代码的拼接方式会生成
VLOOKUP'([@ID]这种完全不符合语法的公式,得调整引号和括号的位置,保证公式结构完整。 - 潜在的空数据范围问题:如果你的表格(ListObject)没有数据行,
DataBodyRange会是Nothing,直接赋值会触发1004错误,最好提前做个判断。
下面是修正后的完整代码,我加了注释说明改动细节:
Sub changeDay(day As Integer) Dim ws As Worksheet Dim lo As ListObject Dim lColName As ListColumn Dim targetSheetName As String ' 替换成你实际使用的工作表名称 targetSheetName = "sheetName" ' 先检查目标工作表是否存在 On Error Resume Next Set ws = ThisWorkbook.Worksheets(targetSheetName) On Error GoTo 0 If ws Is Nothing Then MsgBox "工作表 " & targetSheetName & " 不存在,请检查名称!" Exit Sub End If Set lo = ws.ListObjects(1) Set lColName = lo.ListColumns(2) ' 检查表格是否有数据行,避免空范围赋值报错 If Not lo.DataBodyRange Is Nothing Then ' 修正公式语法:去掉多余单引号、补全括号、添加精确匹配参数 lColName.DataBodyRange.FormulaR1C1 = "=VLOOKUP([@ID],'" & targetSheetName & "'!R2C1:R404C10," & day & ",FALSE)" Else MsgBox "表格中没有数据行,无法设置公式!" End If End Sub
最后补充两个注意点:
- 确保
day参数的取值在1到10之间(你的查找范围是A到J列,共10列),超出范围会导致VLOOKUP返回#REF!错误。 - 如果你的工作表名称没有空格,单引号可以去掉,但加上单引号能适配所有工作表名称的情况,更稳妥。
内容的提问来源于stack exchange,提问作者iShaymus
相关产品推荐
相关产品推荐

