You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel VBA设置外部数据区域属性报错:运行时错误'91'

问题原因及解决方法

错误根源

你遇到的运行时错误'91',是因为代码里的Selection.ListObject.QueryTable对象不存在(返回Nothing),当你试图访问它的.RowNumbers属性时,自然触发“对象变量未设置”的错误。

出现这个问题大概率是因为:你的SQL连接是通过Power Query(获取和转换数据)创建的Excel表,这类结构化表(ListObject)并不关联传统的QueryTable对象,而录制宏生成的代码沿用了旧版对象模型,导致对象引用失效。

分场景解决

场景1:表通过旧版QueryTable创建(未使用Power Query)

直接修改代码,去掉冗余的Select操作,直接引用ListObject对象,同时先检查QueryTable是否存在:

Dim targetTable As ListObject
' 替换成你的工作表名称和表名
Set targetTable = ThisWorkbook.Worksheets("Sheet1").ListObjects("CCA_XXXXXXXXX")

If Not targetTable.QueryTable Is Nothing Then
    With targetTable.QueryTable
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = False
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
    End With
End If

场景2:表通过Power Query创建的SQL连接

这类表没有QueryTable属性,可通过两种方式实现需求:

  1. 手动设置(推荐):
    进入Power Query编辑器,点击「关闭并上载至」→ 勾选「仅创建连接」→ 点击「属性」→ 取消勾选「调整列宽」,再重新加载数据。
  2. VBA代码实现:
Dim sqlConn As WorkbookConnection
Dim targetTable As ListObject

' 替换成你的连接名称、工作表名和表名
Set sqlConn = ThisWorkbook.Connections("SQL连接名称")
Set targetTable = ThisWorkbook.Worksheets("Sheet1").ListObjects("CCA_XXXXXXXXX")

' 调整连接属性
With sqlConn.OLEDBConnection
    .RefreshOnFileOpen = False
    .BackgroundQuery = False
End With

' 直接设置表的列宽(替代AdjustColumnWidth=False的效果)
targetTable.DataBodyRange.Columns.AutoFit ' 如果需要固定列宽,可手动设置.ColumnWidth = 数值

关键提示

  • 永远别用Select/Selection写VBA代码,直接引用对象(工作表、表、单元格),代码稳定性会大幅提升,也不会因为用户误操作选中其他内容而出错。
  • 录制宏生成的代码往往有冗余,且可能适配旧版Excel对象模型,需要根据实际数据源类型调整。

内容的提问来源于stack exchange,提问作者Valerie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 20:20:25