ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: OKJSJSF

[求助] 一簿中多表创建透视表的练习

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-5-30 00:11 | 显示全部楼层
OKJSJSF 发表于 2021-5-23 10:20
昨天在工作表名称上加上数字,就无法创建透视表,如上出错提示!怪!

把创建代码用在单位电脑上,又出现了这个错误提示,无法创建透视表,真是太难搞定了。

TA的精华主题

TA的得分主题

发表于 2021-6-1 11:30 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
这种代码好学吗,我想用一用呢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-6-2 22:54 | 显示全部楼层
zdj9007 发表于 2021-6-1 11:30
这种代码好学吗,我想用一用呢!

好学的,只是对象、方法、属性太多。
我的加载宏最新链接: https://pan.baidu.com/s/1LRhoycrtgkJPpT6q26AM7Q 提取码: wx3j 复制这段内容后打开百度网盘手机App,操作更方便哦

工程密码六个1

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-6-14 11:32 | 显示全部楼层
OKJSJSF 发表于 2021-4-24 23:49
多表创建透视表应该是以一个看不见的access联合查询数据表或文本文件作为缓存进行分类汇总的。该数据表或文 ...

通过对精粹中几个ADO示例的练习,发现这个通过SQL连接技术生成的看不见的表就是叫做无表记录集recordset的东西,它也可以直接通过工作表中的数据直接addnew生成。它象数组一样存在于内存中,有行列数,可以相互转换。

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-6-14 18:03 | 显示全部楼层
OKJSJSF 发表于 2021-6-14 11:32
通过对精粹中几个ADO示例的练习,发现这个通过SQL连接技术生成的看不见的表就是叫做无表记录集recordset ...

还有集合collection。集合不存在行列数,不存在数据类型,相当于把数组或记录集中的数据统统罗列在一起。数组存在行列数,可以不区分数据类型。记录集相当于按行或列区分了数据类型的数组。三者数据多少量可以说没有上限。

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-6-20 22:19 | 显示全部楼层
参照精粹练习连接技术。 excel通过连接导入数据练习.rar (61.43 KB, 下载次数: 1)

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-7-14 22:01 | 显示全部楼层
本帖最后由 OKJSJSF 于 2021-7-14 22:44 编辑

excel从access中查找数据.rar (901.37 KB, 下载次数: 0) 本文档中ADO语句如何改为后期绑定,我试了下没成功,特在本坛求助。

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-6-4 15:30 | 显示全部楼层
本帖最后由 OKJSJSF 于 2022-6-4 15:33 编辑

虽然同一文件夹中多工作簿多工作表或多工作簿各一工作表用VBA-SQL语句学到了创建合并透视表的办法,但在一个工作簿中用VBA-SQL语句为多个工作表创建合并透视表却至今未能创建成功。总是说连接已经失去。
image.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-6-4 15:37 | 显示全部楼层

下面的过程无法在一簿中为多表创建透视表。
Sub 按钮1_Click()
    Dim sh As Worksheet, r As Integer, sql As String, pc As PivotCache, pt As PivotTable
    For Each pt In Worksheets(3).PivotTables
        pt.TableRange2.Clear
    Next
    For Each sh In ThisWorkbook.Worksheets
        With sh
            If .Name <> "合并" Then
                r = .Range("a5").End(xlDown).Row
                If sql <> "" Then sql = sql & " union all"
                sql = sql & " select 姓名, 证件号, 电话, """ & .Name & """ as 表名 from [" & ThisWorkbook.FullName & "].[" & .Name & "$A5:C" & r & "]"
            End If
        End With
    Next
    MsgBox sql, , "自动编辑的SQL命令文本:"
'    Debug.Print sql

    Set pc = ThisWorkbook.PivotCaches.Create(SourceType:=xlExternal)
    With pc
        .Connection = Array("OLEDB;Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;HDR=YES"";")
        .CommandType = xlCmdSql
        .CommandText = sql
        .RefreshOnFileOpen = True
    End With
    Set pt = pc.CreatePivotTable(tabledestination:="合并!R1C1", tablename:="pt1")
    Set sh = Nothing
    Set pt = Nothing
    Set pc = Nothing
    MsgBox "透视表创建完毕。"
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-6-4 15:37 | 显示全部楼层
加入连接语句也没用。
Sub 按钮1_Click()
    Dim sh As Worksheet, r As Integer, sql As String, pc As PivotCache, pt As PivotTable
    For r = 1 To ThisWorkbook.Connections.Count
        ThisWorkbook.Connections(1).Delete
    Next
    For Each pt In Worksheets(3).PivotTables
        pt.TableRange2.Clear
    Next
    For Each sh In ThisWorkbook.Worksheets
        With sh
            If .Name <> "合并" Then
                r = .Range("a5").End(xlDown).Row
                If sql <> "" Then sql = sql & " union all"
                sql = sql & " select 姓名, 证件号, 电话, """ & .Name & """ as 表名 from [" & ThisWorkbook.FullName & "].[" & .Name & "$A5:C" & r & "]"
            End If
        End With
    Next
    MsgBox sql, , "自动编辑的SQL命令文本:"
'    Debug.Print sql

    ThisWorkbook.Connections.AddFromFile ThisWorkbook.FullName
    Set pc = ThisWorkbook.PivotCaches.Create(SourceType:=xlExternal, SourceData:=ThisWorkbook.Connections(1).Name, Version:=xlPivotTableVersion12)
    With pc
        .Connection = Array("OLEDB;Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;HDR=YES"";")
        .CommandType = xlCmdSql
        .CommandText = sql
        .RefreshOnFileOpen = True
    End With
    Set pt = pc.CreatePivotTable(tabledestination:="合并!R1C1", tablename:="pt1")
    Set sh = Nothing
    Set pt = Nothing
    Set pc = Nothing
    MsgBox "透视表创建完毕。"
End Sub
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-25 12:28 , Processed in 0.044168 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表