ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
123
返回列表 发新帖
楼主: tjlinyun

VBA中如何实现动态的数据透视表数据源

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-11-29 17:24 | 显示全部楼层
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        "处理结果!R1C1:R1000000C10"
改为:
"处理结果!Range("A" & (Range("F" & Rows.Count).End(xlUp).Row), "F" & (Range("F" & Rows.Count).End(xlUp).Row))"

我开始是这样想的,然后就错的离谱了,谁知道为啥错?
然后看到别人是下面这样的,我就留下作为注释来看看:


'Dim strSourceData As String, iR As Integer, iC As Integer

'iR = Sheets("处理结果").Range("A65536").End(xlUp).Row       '获取请假明细工作表最下行的行名称
'iC = Sheets("处理结果").Range("J1").End(xlToLeft).Column   '获取请假明细工作表最右列的列名称

'strSourceData = "请假明细!R1C1:R" & iR & "C" & iC           '生成SourceData的参数(String格式)----这个是预先声明参数的方法,但是不是很实用,不如直接弄10万行就行了
   

TA的精华主题

TA的得分主题

发表于 2022-5-16 15:28 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
這個最後是怎麼解決的?

TA的精华主题

TA的得分主题

发表于 2022-5-30 17:16 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
版主的方法,VBA获得了一个固定的地址,将来手动调整数据源时,透视表的区域就不对了吧。

应该还是依靠VBA 自定义一个动态数据源(OFFSET),然后创建的透视表引用这个动态数据源。

贴一段我的代码:创建透视表。   


Set sjsht = ActiveSheet  '数据源表
        
'定义数据源名称
    k = 0
    Do
        flag = True
        flag_Z = False  '已经定义过动态数据源
        k = k + 1
        For Each NA In ActiveWorkbook.Names
            If NA.Value = "=OFFSET(" & sjsht.Name & "!$A$1,,,COUNTA(" & sjsht.Name & "!$A:$A),COUNTA(" & sjsht.Name & "!$1:$1))" Then
                flag_Z = True
                NAname = NA.Name
                Exit For
            End If
            If NA.Name = "数据源" & k And flag_Z = False Then
                flag = False
                Exit For
            End If
        Next NA
        
        If flag = True And flag_Z = False Then
            NAname = "数据源" & k   '数据源名称
            ActiveWorkbook.Names.Add Name:=NAname, RefersToR1C1:= _
            "=OFFSET(" & sjsht.Name & "!R1C1,,,COUNTA(" & sjsht.Name & "!C1),COUNTA(" & sjsht.Name & "!R1))"
        End If
    Loop While flag = False And flag_Z = False
        

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-22 00:30 , Processed in 0.032801 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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