VBA填充表格空白触发错误13,已定义数据集Base1求解决
错误13(类型不匹配)排查与解决
错误根源
触发错误13的核心问题出在If Range("Base1") = 48 Then这行代码:
Range("Base1")是多单元格区域(B10:H32),VBA无法直接将多值区域与单个数值48做比较,导致类型不匹配。- 附带逻辑问题:代码中条件满足时的过滤范围
$C$11:$I$58与命名区域Base1的范围B10:H32不对应;同时Criteria1:=Array("-", "1", "=")里的"="如果是想过滤空白单元格,写法错误(空白应写"")。
修复方案
根据实际需求,分两种常见场景修改:
场景1:判断Base1区域特定单元格值为48
如果是要判断Base1区域的第一个单元格(B10)值是否为48,调整代码如下:
Sub FiltroCh() ' 取Base1区域首个单元格(B10)的值做判断 If Range("Base1").Cells(1, 1).Value = 48 Then ' 修正过滤范围为Base1对应区域,同时调整空白过滤写法 Range("Base1").AutoFilter Field:=1, Criteria1:=Array("-", "1", ""), Operator:=xlFilterValues Else Range("Base1").AutoFilter Field:=1 End If End Sub
场景2:判断Base1区域行数/列数为48
如果是要判断Base1的行数是否为48(原Base1行数为23,可能命名区域范围有误),调整代码如下:
Sub FiltroCh() ' 判断Base1区域的行数是否为48 If Range("Base1").Rows.Count = 48 Then ' 同步修正过滤范围为对应区域 Range("Base1").AutoFilter Field:=1, Criteria1:=Array("-", "1", ""), Operator:=xlFilterValues Else Range("Base1").AutoFilter Field:=1 End If End Sub
额外注意事项
- 若需要将Base1调整为48行的区域,可通过Excel「公式」选项卡→「名称管理器」修改Base1的引用范围。
- 如果
"="确实是要过滤等于字符串"="的单元格,保留"="即可;若是过滤空白单元格,替换为""。
内容的提问来源于stack exchange,提问作者Vmoralese
相关产品推荐
相关产品推荐

