VBA快速创建Excel中数据模型的数据连接

相较于普通的数据透视表,PowerPivot具备如下优势:

  • 处理海量数据
  • 使用多表关系建模
  • 支持强大的DAX公式
  • 性能优化
  • 支持更多统计方式,例如:排重计数(Distnct Count)

如果PowerPivot是基于Excel数据模型的,那么将需要使用VBA创建数据连接,并添加到数据模型中,但是这个过程并不像创建普通数据透视表的数据连接那么简单,需要一些小技巧。

示例文件中的数据表如下图所示。

示例代码如下。

vb 复制代码
Sub CreateConn(ByVal sConName As String, _
                ByVal Wb As String, _
                ByVal Sht As String)
    Dim sRef As String
    sRef = Workbooks(Wb).Sheets(Sht).Range("a1").CurrentRegion.Address(False, False, , True)
    Debug.Print sRef
    Workbooks(Wb).Connections.Add2 Name:=sConName, Description:="", _
        ConnectionString:="WORKSHEET;" & Split(sRef, "!")(0), _
        CommandText:=Split(sRef, "]")(1), _
        lcmdtype:=XlCmdType.xlCmdExcel, _
        createmodelconnection:=True, importrelationships:=False
End Sub

【代码解析】

第1~3行代码声明Sub过程,其中3个参数为

  • sConName为数据连接的名称
  • Wb为工作簿名称
  • Sht为工作表名称

第5行代码获取工作表中数据表的引用地址,其参数含义

  • 第1个参数RowAbsolute,设置为False,指定行引用不使用绝对引用
  • 第2个参数ColumnAbsolute,设置为False,指定列引用不使用绝对引用
  • 第4个参数External,设置为True,即使用外部引用格式
    在本示例中其返回值为[Book1.xlsm]Sheet1!A1:C4

第7~11行代码用于创建数据连接,其他参数为

  • 参数Name用于指定数据连接的名称
  • 参数ConnectionString用于指定连接字符串,参数值为WORKSHEET;[Book1.xlsm]Sheet1
  • 参数CommandText用于指定命令字符串,参数值为Sheet1!A1:C4
  • 参数lcmdtype用于指定连接类型,参数值为XlCmdType.xlCmdExcel常量。

如下代码将调用CreateConn创建数据连接并添加到数据模型中。

vb 复制代码
Sub Demo()
    Call CreateConn("DemoConn", ThisWorkbook.Name, "Sheet1")
End Sub

运行后的结果如下图所示,后续可以创建基于数据模型的PowerPivot。

相关推荐
V_156560272192 天前
陕南生态科创!2026年汉中市高新技术企业申报时间、条件、流程、区县奖补汇总
科技·数据
SL-staff6 天前
研发项目与生产排程联动架构解析:JVS企业计划与APS的数据协同实践
大数据·架构·数据模型·api集成·jvs企业计划·jvs-aps·高级计划与排程
lh179312 天前
数据产业服务分类(68)——数据产业服务交付——服务交付维度
数据
lh179313 天前
数据产业服务分类(39)——分类设计过程与实现——分类设计过程
数据
lh179314 天前
数据产业服务分类(49)——分类设计——数据咨询服务
数据
lh179315 天前
数据产业服务分类(50)——分类设计——数据平台服务
数据
网络研究院15 天前
Brave浏览器放大招引入容器功能,实现多账户安全隔离
网络·安全·容器·浏览器·数据·隐私
lh179315 天前
数据产业服务分类(52)——分类设计——数据工程服务
数据
lh179316 天前
数据产业服务分类(34)——原则、目标与方法——概述
数据
lh179316 天前
数据产业服务分类(37)——原则、目标与方法——分类设计方法
数据