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。

相关推荐
Lynne3093 天前
工业网络,到底该集中还是自治?
网络·架构·数据
Lynne3096 天前
工业边缘计算网关到底解决什么问题?从设备接入到AI推理的技术链路
网络·数据分析·数据
Lynne3097 天前
为什么工业数据越来越需要在现场处理?边缘计算正在解决什么问题?
网络·数据分析·数据
知孤云出岫7 天前
深扒:DolphinDB,为什么它正在成为工业物联网实时计算的新底座?
物联网·数据·工业·dolphindb·计算
my_realmy13 天前
八股面试基础之数据类型详解篇
数据类型·数据·自动装箱·包装
凌波波13 天前
从经验驱动到数据驱动,到底差在哪一步
数据
xiancai_xianyu14 天前
想把数据模型一次建完美再上AI?会一直卡在建模里
开发语言·人工智能·php·数据模型·语义层·本体建模·企业知识网络
Sherotree20 天前
看懂平台数据:阅读、搜索、关注
写作·运营·数据·方法论
ZISHU_9871 个月前
用 TLabel 给 SynTouch BioTac 数据做语义标注:从原始信号到结构化标注
开发语言·人工智能·python·数据·机器人触觉
Navicat中国1 个月前
使用 Navicat 轻松生成数据库测试数据
数据库·数据