ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

[复制链接]

TA的精华主题

TA的得分主题

发表于 2008-4-21 16:33 | 显示全部楼层 |阅读模式

问个简单的问题,以下是我录制的一个数据透视表的宏,我想让这个宏能够自动选择数据源(即数据源添加新的行后,VBA可以自动识别区域),请问应该怎么做?

Sub 宏3()
    ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
        "Sheet1!R1C1:R15C4").
CreatePivotTable TableDestination:="", TableName:= _
        "数据透视表3"
    ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
    ActiveSheet.Cells(3, 1).Select
    ActiveSheet.PivotTables("数据透视表3").SmallGrid = False
    ActiveSheet.PivotTables("数据透视表3").AddFields RowFields:="商品编码"
    ActiveSheet.PivotTables("数据透视表3").PivotFields("签收数量").Orientation = xlDataField
End Sub

TA的精华主题

TA的得分主题

发表于 2008-4-21 17:52 | 显示全部楼层

Sub 宏3()


    ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
        "Sheet1!" & activesheet.usedrange.address).
CreatePivotTable TableDestination:="", TableName:= _
        "数据透视表3"
    ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
    ActiveSheet.Cells(3, 1).Select
    ActiveSheet.PivotTables("数据透视表3").SmallGrid = False
    ActiveSheet.PivotTables("数据透视表3").AddFields RowFields:="商品编码"
    ActiveSheet.PivotTables("数据透视表3").PivotFields("签收数量").Orientation = xlDataField
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-4-22 09:43 | 显示全部楼层
我试了一下不行哟!而且原来是求和的,不知为什么突然变成了计数,不明白?[em06]

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-4-22 15:06 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

我自己想了个办法

将要进行数据透视的源区域定义动态的名称database1

database1=OFFSET(sheet1!$A$1,0,0,COUNTA(sheet1!$A:$A),4)

将database1放入sourcedata即可.

Sub 宏3()
    ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
        "dababase1").
CreatePivotTable TableDestination:="", TableName:= _
        "数据透视表3"
    ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
    ActiveSheet.Cells(3, 1).Select
    ActiveSheet.PivotTables("数据透视表3").SmallGrid = False
    ActiveSheet.PivotTables("数据透视表3").AddFields RowFields:="商品编码"
    ActiveSheet.PivotTables("数据透视表3").PivotFields("签收数量").Orientation = xlDataField
End Sub

TA的精华主题

TA的得分主题

发表于 2008-10-5 11:02 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

直接用数据透视表向导创建Pivottablewizard,就不用pivotcaches.add方法。

ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
       range("A1").currentregion.address).
CreatePivotTable TableDestination:="", TableName:= _
        "数据透视表3"

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-10-24 10:24 | 显示全部楼层
QUOTE:
以下是引用yanjie在2008-10-5 11:02:18的发言:

直接用数据透视表向导创建Pivottablewizard,就不用pivotcaches.add方法。

ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
       range("A1").currentregion.address).
CreatePivotTable TableDestination:="", TableName:= _
        "数据透视表3"

    比我的方法简单多了,谢谢!

TA的精华主题

TA的得分主题

发表于 2010-1-29 14:31 | 显示全部楼层
database1=OFFSET(sheet1!$A$1,0,0,COUNTA(sheet1!$A:$A),4)

这部分代码我也用了。但是红色的部分提示为无效的字符

TA的精华主题

TA的得分主题

发表于 2010-6-17 09:35 | 显示全部楼层
原帖由 xyhomesky 于 2010-1-29 14:31 发表
database1=OFFSET(sheet1!$A$1,0,0,COUNTA(sheet1!$A:$A),4)

这部分代码我也用了。但是红色的部分提示为无效的字符

我也用过这个,不过没有遇得到你说的问题。万幸。对VBA真的很费解,有时候OK,有时候就不OK,计算机语言,唉~难搞

TA的精华主题

TA的得分主题

发表于 2010-8-27 13:52 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
版主的方法很有用,我正遇到这问题,解决了,谢谢

TA的精华主题

TA的得分主题

发表于 2010-9-17 08:42 | 显示全部楼层
呵呵。。。谢谢了!刚好需要这个代码!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-22 01:21 , Processed in 0.037824 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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