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,确保刷新时自动使用密码,无需手动输入。
使用步骤
- 打开Excel文件,按下
Alt+F11打开VBA编辑器。 - 找到对应的模块,替换原代码为修正后的代码,同时修改工作表名和表格名为实际名称。
- 返回Excel界面,给按钮绑定这个宏,点击即可一键刷新SQL表。
内容的提问来源于stack exchange,提问作者Aadit
相关产品推荐
相关产品推荐

