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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 07:32:52