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

VBA按钮刷新SQL连接出现运行时错误91的解决求助

解决VBA宏运行时错误91并实现Azure SQL表一键刷新

错误原因分析

运行时错误91是因为原代码依赖Selection对象,但点击按钮时若未选中SQL连接表的区域,Selection.ListObject会返回空值,导致后续调用QueryTable时找不到有效对象。

修正后的代码

直接指定目标表格,避免依赖选中区域,同时确保连接信息正确,实现一键刷新:

Sub RefreshCRS610()
    ' 定义目标工作表和表格对象,根据实际情况修改名称
    Dim ws As Worksheet
    Dim tbl As ListObject
    
    Set ws = ThisWorkbook.Worksheets("你的工作表名称") ' 替换为实际工作表名
    Set tbl = ws.ListObjects("你的表格名称") ' 替换为实际SQL连接表的名称
    
    ' 更新连接字符串(已包含密码,避免重复输入)
    tbl.QueryTable.Connection = _
        "OLEDB;Provider=SQLOLEDB.1;Password=FDReport;Persist Security Info=True;" & _
        "User ID=FDReport;Initial Catalog=M6FDBGRP;Data Source=mlirvcb001;" & _
        "Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;" & _
        "Workstation ID=FXV10084;Use Encryption for Data=False;" & _
        "Tag with column collation when possible=False"
    
    tbl.QueryTable.CommandType = xlCmdSql
    tbl.QueryTable.CommandText = _
        "SELECT DISTINCT OKCONO As 'Company Number', OKCUNO As 'Customer Number', " & _
        "OKSTAT As 'Status', OKRESP As 'Branch Responsible' FROM M6FDBGRP.MPXFDTA.OCUSMA"
    
    ' 执行刷新,BackgroundQuery设为False确保刷新完成后再继续
    tbl.QueryTable.Refresh BackgroundQuery:=False
End Sub

关键修改点说明

  • 直接引用工作表和表格对象:通过Set ws和Set tbl明确指定目标,不再依赖Selection,避免选中区域错误导致的对象未引用问题。
  • 简化连接字符串:把原数组形式的连接字符串合并为单条字符串,更易维护。
  • 保留密码在连接字符串中:结合Persist Security Info=True,确保刷新时自动使用密码,无需手动输入。

使用步骤

  1. 打开Excel文件,按下Alt+F11打开VBA编辑器。
  2. 找到对应的模块,替换原代码为修正后的代码,同时修改工作表名和表格名为实际名称。
  3. 返回Excel界面,给按钮绑定这个宏,点击即可一键刷新SQL表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 23:05:27