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

如何在Excel 2016 VBA中用RecordSet访问Power Pivot数据模型数据

解决Excel 2016数据模型通过VBA RecordSet访问的问题

错误原因

你当前的代码直接用ADOConnection执行SQL查询,但Excel数据模型本质是Tabular模型,需要使用DAX查询而非普通SQL,且连接对象的调用方式存在问题。

正确实现步骤

1. 引用ADO库

打开VBA编辑器(按Alt+F11),依次点击「工具」→「引用」,勾选Microsoft ActiveX Data Objects 6.1 Library(或对应适配版本)。

2. 修正后的VBA代码

使用DAX查询语法,并通过正确方式获取模型连接:

Public Sub AccessDataModelWithRecordset()
    Dim conn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim daxQuery As String
    
    ' 初始化并设置连接字符串
    Set conn = New ADODB.Connection
    conn.ConnectionString = ThisWorkbook.Connections("ThisWorkbookDataModel").ODBCConnection.Connection
    
    ' 打开连接
    conn.Open
    
    ' 编写DAX查询(数据模型专用查询语言)
    daxQuery = "EVALUATE tbl_Students"
    
    ' 执行查询获取RecordSet
    Set rs = New ADODB.Recordset
    rs.Open daxQuery, conn
    
    ' 示例:输出第一条记录的FirstName字段到立即窗口
    If Not rs.EOF Then
        Debug.Print rs.Fields("FirstName").Value
    End If
    
    ' 清理资源
    rs.Close
    conn.Close
    Set rs = Nothing
    Set conn = Nothing
End Sub

关键说明

  • 数据模型的查询语言是DAX,而非普通SQL,必须用EVALUATE关键字引用表,比如EVALUATE tbl_Students就是查询整张学生表的DAX语句。
  • 不能直接调用ModelConnection.ADOConnection,需通过ODBCConnection.Connection获取正确的连接字符串,再手动创建ADO连接。
  • 如需筛选或聚合数据,直接使用DAX语法,例如:
    EVALUATE 
    FILTER(tbl_Students, tbl_Students[Age] > 18)
    

常见问题排查

  • 表名找不到:确认数据模型中的表名拼写准确,DAX区分大小写,表名无需加引号。
  • 连接失败:检查Excel数据模型是否正常启用,可通过「数据」→「连接」→「属性」查看ODBC连接字符串的有效性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 19:45:04