Excel ListObject删除数据后获取DataBodyRange行数报错求助
解决Excel ListObject删除数据后访问DataBodyRange出错的问题
嘿,我来帮你搞定这个VBA问题!
你遇到的错误根源很明确:当你执行ThisWorkbook.Sheets("comm").ListObjects(1).DataBodyRange.Delete删除所有数据行后,这个ListObject的DataBodyRange属性就变成了Nothing(也就是不存在了)。这时候直接调用COMMtbl.DataBodyRange.Rows.Count,相当于试图访问一个不存在对象的属性,自然会抛出运行时错误。
解决方案分两步走:
1. 安全删除数据行
首先,删除前要先判断DataBodyRange是否存在,避免删除空表格时先出错:
Dim COMMtbl As ListObject Set COMMtbl = ThisWorkbook.Sheets("comm").ListObjects(1) ' 先检查是否有数据行,再执行删除 If Not COMMtbl.DataBodyRange Is Nothing Then COMMtbl.DataBodyRange.Delete End If
2. 安全获取数据行数
之后要统计数据行数时,同样要先判断DataBodyRange是否存在,分情况处理:
Dim myNrofRowsinCOMM As Long If Not COMMtbl.DataBodyRange Is Nothing Then ' 有数据行,直接取行数 myNrofRowsinCOMM = COMMtbl.DataBodyRange.Rows.Count Else ' 只有表头,数据行数为0 myNrofRowsinCOMM = 0 End If ' 也可以用更简洁的IIf写法 myNrofRowsinCOMM = IIf(COMMtbl.DataBodyRange Is Nothing, 0, COMMtbl.DataBodyRange.Rows.Count)
补充说明
你之前用MsgBox COMMtbl.Range.Rows.Count排查,这个返回的是包括表头在内的总行数。比如表格只有表头时,它会返回1,而我们需要的DataBodyRange.Rows.Count是数据行的数量,这时候就是0,两者要注意区分哦。
内容的提问来源于stack exchange,提问作者JFerro
相关产品推荐
相关产品推荐

