VBA代码Advanced Filter运行时错误1004求助,需修复并实现筛选
修复VBA高级筛选错误(错误1004)
问题分析
你遇到的错误1004(提取范围存在缺失或无效字段名),根源是高级筛选的条件区域表头和数据源的表头不匹配。原代码中条件区域用了"TOT"作为表头,但当前运行的文件里,数据源("Voorstel"工作表A11开始的区域)没有这个字段名,导致筛选无法识别目标列。
关于你问的AdvancedFilter参数2:这个参数对应Action参数,值为2代表xlFilterCopy,作用是把筛选后的结果复制到指定的目标区域(代码里的r),而不是在原数据区域隐藏不符合条件的行。
修复方案
步骤1:确认数据源表头
打开报错的文件,找到"Voorstel"工作表中A11开始的数据区域,定位代表「数量」的列,记录它的表头文本(必须和单元格内容完全一致,包括大小写、空格,比如可能是"Totaal"、"总数"等)。
步骤2:修改代码
把条件区域的表头改成和数据源数量列一致的文本,同时优化代码稳定性,避免依赖CurrentRegion和ActiveWorkbook的潜在问题:
Sub Voorstel() ' voorstel om door te sturen naar de klant Application.DisplayAlerts = False Application.ScreenUpdating = False Dim lastRow As Long ' 改用Long避免行号超过Integer上限 Dim r As Range, c As Range, sh As Worksheet Dim newWB As Workbook ' 显式声明新工作簿,避免ActiveWorkbook的不确定性 Set sh = ThisWorkbook.Sheets("Voorstel") Set newWB = Workbooks.Add Set r = newWB.Sheets(1).Range("A1").Resize(2, 6) Set c = r.Offset(, 7).Resize(2, 1) ' 复制数据源的表头到目标区域 r.Resize(1) = Array(sh.Range("A11").Value, sh.Range("B11").Value, sh.Range("D11").Value, _ sh.Range("F11").Value, sh.Range("H11").Value, sh.Range("J11").Value) ' --- 关键修改:把下面的"TOT"改成你找到的数量列的表头文本 --- c.Value = Application.Transpose(Array("这里改成数量列的表头", "<>0")) ' 确保数据源区域正确,避免CurrentRegion识别错误 Dim dataRange As Range Set dataRange = sh.Range("A11").CurrentRegion ' 检查条件表头是否存在于数据源表头中 If IsError(Application.Match(c.Cells(1,1).Value, dataRange.Rows(1), 0)) Then MsgBox "条件表头不存在于数据源中,请检查!" GoTo Cleanup End If ' 执行高级筛选 dataRange.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=c, CopyToRange:=r c.ClearContents ' 保存新工作簿 newWB.SaveAs Filename:="V:\Supply Chain Team\07. Analysebestanden Klanten\16. Behoeftebepaling\Proposal\Proposal" & _ Format(Date, " dd-mm-yyyy") & ".xlsx", FileFormat:=51 Cleanup: Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub
关键修改说明
- 替换
c.Value里的第一个元素(原"TOT")为你找到的数量列表头文本,必须完全匹配。 - 新增表头存在性检查,提前报错避免1004错误。
- 改用显式声明的
newWB代替ActiveWorkbook,避免多工作簿场景下的选中错误。 - 把
lastRow类型从Integer改为Long,避免行号超过32767时溢出。
验证
修改后运行代码,若弹出"条件表头不存在于数据源中"提示,说明填写的表头仍不匹配,需重新核对;若正常运行,会生成筛选出非零数量行的新文件。
内容的提问来源于stack exchange,提问作者shaye
相关产品推荐
相关产品推荐

