前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VBA与数据库——写个类操作ADO_使用RecordSet创建透视表

VBA与数据库——写个类操作ADO_使用RecordSet创建透视表

作者头像
xyj
发布2021-12-01 20:11:00
1.8K0
发布2021-12-01 20:11:00
举报
文章被收录于专栏:VBA 学习VBA 学习

在Excel中,数据透视表是一个非常强大的工具,而且非常适合普通人使用,不需要有什么高深技巧,通过一些拖拽操作就能够完成较为复杂的数据汇总、分析等操作。

接触sql语句之后,发现数据透视表其实和sql语句的原理是一样的,不知道它的底层是不是就是使用了sql语句。

在Excel中使用vba来创建透视表可以用这样的语句:

代码语言:javascript
复制
ActiveWorkbook.PivotCaches.Add(xlDatabase, "数据源单元格地址").CreatePivotTable TableDestination:=Range("A3")

其中xlDatabase是枚举类型XlPivotTableSourceType 中的一个,它包含以下几项:

代码语言:javascript
复制
名称             值  说明
xlConsolidation  3  多重合并计算数据区域。
xlDatabase       1  Microsoft Excel 列表或数据库。
xlExternal       2  其他应用程序中的数据。
xlPivotTable  -4148  与另一数据透视表相同来源。
xlScenario       4  数据基于使用方案管理器创建的方案。

Excel本身并不是一个真正的数据库,在vba中使用ado更多的是操作外部的数据库,有时候是直接提取数据查看就可以,有时候还需要对数据进行一些汇总、计数等操作。

这时候就需要构建好sql语句来完成汇总、计数等操作,然后将数据读取到Excel中进行展示,如果需要查看的分类汇总条件改变了,就又得重新构建sql语句。

如果将数据源读取到透视表,再使用透视表的功能进行处理就可以简化sql语句的编写,也不需要再重新读取数据。

xlExternal指明的就是外部的数据源,可以通过sql语句读取出数据,然后使用这个数据来创建透视表,在CADO里面增加1个函数:

代码语言:javascript
复制
'rng            透视表的位置
Function ResultToPivotCache(StrSql As String, rng As Range) As Long
    Dim pc As PivotCache
    Dim rst As ADODB.Recordset
    Set rst = New ADODB.Recordset
    
    On Error GoTo errHandle

    rst.Open StrSql, AdoConn, adOpenStatic, adLockReadOnly

    Set pc = rng.Parent.Parent.PivotCaches.Add(xlExternal)
    Set pc.Recordset = rst
    pc.CreatePivotTable rng
    ResultToPivotCache = RetCode.RetSucce
    
    Exit Function

errHandle:
    StrErr = Err.Description
    ResultToPivotCache = RetCode.RetErr
End Function

调用测试:

生成之后的透视表和使用Excel数据生成的使用上没有区别,透视表的数据源是会保存在Excel文件中的,打开文件的时候不会有Sheet展示出来:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-11-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 VBA 学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档