Excel高级筛选9999条数据报1004错误,求排查解决
问题分析与解决方案
你的问题不是高级筛选的数据范围限制,而是代码中构建数据范围时的字符串拼接错误导致的1004报错。
错误根源
看这行代码:
Set tblRange = WSC.Range("A5:L9999" & irow)
当你有9999条数据时,irow的值是10000(因为Offset(1,0)),拼接后会变成A5:L999910000——这个行号远超过Excel工作表的最大行(1048576行),属于无效的单元格引用,自然触发1004错误。而当数据只有999条时,irow是1000,拼接后是A5:L99991000,虽然同样是错误的范围,但此时实际数据行远小于这个错误行号,碰巧没触发越界报错,所以看似正常运行。
修正代码
你需要正确构建从A5到L列最后一行数据的范围,修改如下:
Private Sub txtsearchfor_Change() Dim irow As Long Dim tblRange As Range, tblCriteria As Range Dim WSC As Worksheet ' 用Worksheet类型替代Object,更严谨 Set WSC = Worksheets("Catalog") ' 无需Activate,直接操作工作表即可 irow = WSC.Cells(WSC.Rows.Count, 1).End(xlUp).Row ' 去掉Offset(1,0),取最后一行数据的行号 ' 正确构建数据范围:A5到L列最后一行 Set tblRange = WSC.Range("A5:L" & irow) Set tblCriteria = WSC.Range("X1:X2") WSC.Range("X1") = cbsearchby WSC.Range("X2") = "*" & txtsearchfor & "*" ' 高级筛选的复制目标用起始单元格即可,Excel会自动匹配范围 tblRange.AdvancedFilter xlFilterCopy, tblCriteria, WSC.Range("AA5"), False Call GetCatalogSearchData End Sub
补充说明
Excel的高级筛选本身没有特殊行数限制,只要数据范围不超过当前工作表最大行数(Excel 2007及以后为1048576行)即可正常运行。
内容的提问来源于stack exchange,提问作者Uzin21
相关产品推荐
相关产品推荐

