Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 7112|回复: 13

[已解决]出现了" 应用程序定义或对象定义错误 " ?

[复制链接]
发表于 2011-8-17 09:50 | 显示全部楼层 |阅读模式
本帖最后由 hehehehebt 于 2011-8-17 11:03 编辑

Sub create()
    Dim mypivot As PivotTable
    Sheets("bill").Activate
    Range("a1").Select
    Set mypivot = ActiveSheet.PivotTableWizard(SourceType:=xlDatabase, SourceData:=Sheets("bill").Range("a1:d38"), tablename:="table1")
    mypivot.AddFields RowFields:="agency"
    mypivot.AddDataField field:=mypivot.PivotFields("amount"), Caption:="", Function:=xlSum
    'mypivot.PivotTables("table1").CalculatedFields.Add "USD", "=amount / worksheets("exchange rate").range("a1")"
    'mypivot.AddDataField field:=mypivot.PivotFields("usd"), Function:=xlSum

End Sub
更新一下问题,版主已经帮忙把标题中的问题解决了,

现在的问题是我打算增加一个计算字段,叫做usd, 是用amount字段除以另一张表的a1单元格的值计算出来的,然后把这个usd字段添加到透视表值区域。计算字段那写错了,估计还是地址引用那里。请大家帮忙看看,谢谢!


我个人感觉刚开始学vba的时候,各种表,单元格的地址引用,比如什么时候加括号,引号等等,比较难掌握清楚。
最佳答案
1970-1-1 08:00

pivottable.rar

15.17 KB, 下载次数: 32

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
 楼主| 发表于 2011-8-17 09:58 | 显示全部楼层
刚刚有突破了,原来是 caption 不能是amount,我换成别的名称,就能生成了,不过不太明白为什么
回复

使用道具 举报

发表于 2011-8-17 10:01 | 显示全部楼层
本帖最后由 爱疯 于 2011-8-17 10:02 编辑

至少,第1句不正确
Sheets("sheet1").Range("a1").Select

可改为
Sheets("sheet1").Activate
Range("a1").Select
回复

使用道具 举报

 楼主| 发表于 2011-8-17 10:33 | 显示全部楼层
回复 爱疯 的帖子

谢谢版主!果然按照你写的改完以后解决了很大的问题,之前只能执行一遍,然后就不能继续生成新的透视表了,这样改完后就可以不断生成了.

还得再和版主请教个问题(不好意思,新手问题多多{:301:})

我想添加个计算字段,用amount 除以6得到一个叫做usd的字段:
mypivot.PivotTables("table1").CalculatedFields.Add "USD", "=amount /6"
红色的部分应该是写错了,似乎amount字段不能直接这么写,修改半天也不成功,如何修改呢?
回复

使用道具 举报

发表于 2011-8-17 10:42 | 显示全部楼层
楼主别这么说,我对透视表的代码也不熟。
最好能上传一下附件,大家才好理解你的问题,便于测试和回复。
如果担心数据安全,就替换下内容。
回复

使用道具 举报

 楼主| 发表于 2011-8-17 10:59 | 显示全部楼层
回复 爱疯 的帖子

版主太好了!

我上传了这个附件. 现在工作中比较多用的就是数据透视表了,如果能研究好怎么用vba自动生成,会有很大帮助.{:021:}
回复

使用道具 举报

发表于 2011-8-17 11:26 | 显示全部楼层
回复 hehehehebt 的帖子

Sub Macro4()
'
' Macro4 Macro
'
' 快捷键: Ctrl+Shift+P
'
    Sheets.Add
    ActiveWorkbook.PivotCaches.create(xlDatabase, "bill!a:d").CreatePivotTable Range("a3")
    With ActiveSheet.PivotTables(1)
        .AddFields "agency"
        .AddDataField .PivotFields("amount"), "求和项:amount", xlSum
        .CalculatedFields.Add "USD", "=amount /6", True
        .PivotFields("USD").Orientation = xlDataField
        .PivotFields("agency").PivotItems("(blank)").Visible = False
   End With
End Sub

回复

使用道具 举报

 楼主| 发表于 2011-8-17 11:36 | 显示全部楼层
回复 Zipall 的帖子

谢谢zipall,之前你也帮助过我很多次。

你给的这段代码是录制的,不过我需要的是里面加入了变量的, amount/6的6,我想用变量代替,比如一个表里的a1的值,想知道如何输入

点评

这段代码是你录的,不是我录的.我只是修改了你录的那段代码.  发表于 2011-8-17 12:26
回复

使用道具 举报

发表于 2011-8-17 11:37 | 显示全部楼层
"=amount /" & sheets("exchange rate").range("a1")
回复

使用道具 举报

 楼主| 发表于 2011-8-17 11:50 | 显示全部楼层
本帖最后由 hehehehebt 于 2011-8-17 11:50 编辑

回复 Zipall 的帖子

考了进去,还是不行,对象不支持该属性或方法
mypivot.PivotTables("table1").CalculatedFields.Add "USD", "=amount /" & Sheets("exchange rate").Range("a1")
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-24 01:45 , Processed in 0.387851 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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