Excel 2013通过SQL语句从SQL Server取数的方法及VBA实现需求
在Excel 2013中用VBA执行SQL查询读取SQL Server数据
我懂你的痛点——Excel 365/2016里能直接通过向导输入SQL语句从SQL Server取过滤后的数据,但Excel 2013的向导没这个功能,只能拉全量数据,确实挺麻烦。下面给你一套能用的VBA代码,帮你实现直接执行自定义SQL并把结果导入Excel的功能:
完整VBA代码
Sub ImportFilteredDataFromSQLServer() Dim wb As Workbook Dim ws As Worksheet Dim sqlQuery As String Dim connString As String ' 新建工作簿存放数据(也可以指定现有工作簿) Set wb = Workbooks.Add Set ws = wb.Worksheets(1) ' 自定义你的SQL查询语句,替换成实际的表、字段和过滤条件 sqlQuery = "SELECT TOP 10 * FROM YourTableName WHERE YourField = 25" ' 构建SQL Server连接字符串,根据你的环境修改参数 ' 示例用Windows身份验证,SQL身份验证需添加UID=用户名;PWD=密码; connString = "ODBC;DRIVER={SQL Server};SERVER=YourServerName;DATABASE=YourDatabaseName;Trusted_Connection=Yes;" ' 关闭提示弹窗,避免操作被打断 Application.DisplayAlerts = False ' 执行查询并导入数据到工作表 With ws.QueryTables.Add(Connection:=connString, Destination:=ws.Range("A1")) .CommandType = xlCmdSql .CommandText = sqlQuery .BackgroundQuery = False ' 同步执行,等待数据加载完成 .RefreshStyle = xlOverwriteCells ' 覆盖目标区域原有内容 .Refresh ' 触发查询执行 End With ' 恢复系统提示弹窗 Application.DisplayAlerts = True ' 给工作表改个直观的名字 ws.Name = "过滤后数据" MsgBox "数据导入完成!", vbInformation End Sub
关键注意事项
- 连接字符串调整:把
YourServerName换成你的SQL Server实例名,YourDatabaseName换成目标数据库名;如果用SQL身份验证,将连接字符串修改为"ODBC;DRIVER={SQL Server};SERVER=YourServerName;DATABASE=YourDatabaseName;UID=YourUserName;PWD=YourPassword;" - SQL语句自定义:替换
YourTableName和YourField为实际的表名、字段,调整WHERE条件匹配你的过滤需求 - 运行方式:打开Excel 2013后按
Alt+F11打开VBA编辑器,插入模块粘贴代码,修改参数后运行即可
和你在Excel 365里用的代码不同,这个方案直接通过ODBC连接SQL Server执行SQL,不需要依赖Mashup组件(Excel 2013可能没有该组件),兼容性更强。
内容的提问来源于stack exchange,提问作者Neil
相关产品推荐
相关产品推荐

