VBA运行触发91错误,DataBodyRange的Rows.Count判断行报错如何解决
错误原因
报错91(对象变量或With块变量未设置)的根本原因是:当ListObject(即Excel结构化表格)没有任何数据行时,DataBodyRange属性会返回Nothing,你直接在With语句中引用该不存在的对象,访问其Rows.Count属性就会触发报错。
修复方案
1. 修正表格行删除逻辑
先判断DataBodyRange是否存在,再执行后续操作,避免访问空对象:
' 原删除表格行逻辑替换为以下内容 If Not tbl.DataBodyRange Is Nothing Then With tbl.DataBodyRange If .Rows.Count > 1 Then .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count).Delete End If End With tbl.DataBodyRange.Rows(1).ClearContents Else ' 表格无数据行时先新增1行,避免后续操作继续报错 tbl.ListRows.Add End If
2. 额外代码问题修正
你当前代码还存在1个明显语法错误,后续运行也会触发报错:
排序逻辑的判断语句漏写了比较运算符,原代码If Cells(j + 11, 2).Value(i + 11, 2).Value Then需要补全比较符,示例如下(按升序排序的写法):
If Cells(j + 11, 2).Value < Cells(i + 11, 2).Value Then
另外建议补充工作表限定符,不要直接用无表名的Cells调用,避免活动表非Tirage_1时出现数据异常。
内容的提问来源于stack exchange,提问作者juliengm
相关产品推荐
相关产品推荐

