Excel导入其他工作簿ListObject表格至数组时遇Error 91问题求助
解决VBA Error 91:Object variable not set问题
你的代码触发Error 91,核心原因是PCws.ListObjects("ImportTable").DataBodyRange这条引用链里有对象未被正确初始化,常见两种情况:
- 目标工作表
ImportSheet里不存在名为ImportTable的ListObject - 这个ListObject存在,但没有任何数据行,导致
DataBodyRange为Nothing
针对这两种情况,修改代码如下,加入对象存在性检查和空数据行的处理:
Sub Test() Dim arrPC As Variant Dim PCwb As Workbook Dim ws As Worksheet Dim PCws As Worksheet Dim importTable As ListObject Set ws = ThisWorkbook.Sheets("MainSheet") ' 打开工作簿时加入错误捕获,避免路径或文件不存在报错 On Error Resume Next Set PCwb = Workbooks.Open("C:\Path\OtherWorkbook") On Error GoTo 0 If PCwb Is Nothing Then MsgBox "目标工作簿无法打开,请检查路径是否正确" Exit Sub End If ' 检查目标工作表是否存在 On Error Resume Next Set PCws = PCwb.Sheets("ImportSheet") On Error GoTo 0 If PCws Is Nothing Then MsgBox "工作簿中不存在ImportSheet工作表" PCwb.Close SaveChanges:=False Exit Sub End If ' 检查ListObject是否存在 On Error Resume Next Set importTable = PCws.ListObjects("ImportTable") On Error GoTo 0 If importTable Is Nothing Then MsgBox "ImportSheet中不存在名为ImportTable的表格" PCwb.Close SaveChanges:=False Exit Sub End If ' 处理DataBodyRange为空的情况 If Not importTable.DataBodyRange Is Nothing Then arrPC = importTable.DataBodyRange.Value ' 清空数据行 importTable.DataBodyRange.ClearContents Else ' 表格无数据时初始化空数组 arrPC = Empty MsgBox "ImportTable中没有数据行" End If PCwb.Close SaveChanges:=True End Sub
关键修改点说明:
- 增加了工作簿、工作表、ListObject的存在性检查,避免因对象不存在触发错误
- 单独把ListObject赋值给变量
importTable,简化后续引用,也方便检查 - 先判断
DataBodyRange是否存在,再执行赋值和清空操作,避免空对象引用 - 加入了错误提示,方便快速定位问题
- 关闭工作簿时明确指定
SaveChanges参数,避免弹出不必要的保存提示
内容的提问来源于stack exchange,提问作者GreyGhost
相关产品推荐
相关产品推荐

