Excel VBA删除各工作表表格行列触发运行时错误91求助
解决VBA宏运行时错误91的问题
错误原因
运行时错误91触发的核心原因是:当目标表格只有表头、没有数据行时,tbl.DataBodyRange会返回Nothing(空对象)。此时直接通过With tbl.DataBodyRange访问.Rows.Count,就会触发「对象变量或With块变量未设置」的错误。
修复后的代码
Sub ClearTables() Dim sht As Worksheet Dim tbl As ListObject Dim tblData As Range For Each sht In Worksheets If sht.Tab.Color = 16247773 Then For Each tbl In sht.ListObjects ' 捕获数据区域对象,提前判空避免错误 Set tblData = tbl.DataBodyRange ' 先处理多余列:直接操作表格列集合,无需依赖数据行 If tbl.ListColumns.Count > 3 Then tbl.ListColumns(4).Range.Resize(, tbl.ListColumns.Count - 3).Delete End If ' 仅当存在数据行时,处理多余行和清除内容 If Not tblData Is Nothing Then If tblData.Rows.Count > 1 Then tblData.Offset(1).Resize(tblData.Rows.Count - 1).Delete End If tblData.ClearContents End If Next tbl End If Next sht End Sub
关键修改说明
- 空对象预判:用
Set tblData = tbl.DataBodyRange将数据区域赋值给变量,再通过Not tblData Is Nothing判断是否存在数据行,彻底规避空对象访问错误。 - 列操作优化:直接操作
tbl.ListColumns(表格列集合)处理多余列,即使表格没有数据行,表头列始终存在,能正常执行删除操作。 - 行操作安全化:仅当确认存在数据行时,才执行删除多余行和清除内容的逻辑,避免触发错误。
内容的提问来源于stack exchange,提问作者monica
相关产品推荐
相关产品推荐

