如何在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
相关产品推荐
相关产品推荐

