Excel VBA。从Personal.xlsb创建数据透视表
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Excel VBA。从Personal.xlsb创建数据透视表相关的知识,希望对你有一定的参考价值。
当模块直接导入工作簿时,代码完全正常。尝试从Personal.xlsb启动VBA代码 - 出错。
运行时错误'5' 无效的过程调用或参数。)
Debug.Print ThisWorkbook.PivotCaches.Count
给出零,表示缓存中没有数据。
需要帮助来定义personal.xlsb
的数据源
Worksheets("Sheet1").Activate
Set pc = ThisWorkbook.PivotCaches.Create( _
SourceType:=xlDatabase, _
SourceData:=Sheet1.Name & "!" & Sheet1.Range("A1").CurrentRegion.Address, _
Version:=xlPivotTableVersion15)
Debug.Print ThisWorkbook.PivotCaches.Count
Worksheets.Add
ActiveSheet.Name = "PivotTable"
Range("A3").Select
Set pt = pc.CreatePivotTable( _
TableDestination:=ActiveCell, _
TableName:="ReportPivot")'
答案
Thisworkbook
始终引用包含代码的工作簿 - 在本例中是您的个人工作簿。相反,你可能想参考Activeworkbook
。
在下面的代码中,我在变量声明之后设置了对ActiveWorkbook的引用。 PivotCache,PivotTable和任何公式都引用了ActiveWorkbook。
Sub Test()
Dim wrkBk As Workbook
Dim wrkSht As Worksheet
Dim wrkSht2 As Worksheet
Dim pc As PivotCache
Dim pt As PivotTable
Set wrkBk = ActiveWorkbook
Set wrkSht = wrkBk.Worksheets("Sheet1")
Set pc = wrkBk.PivotCaches.Create( _
SourceType:=xlDatabase, _
SourceData:=wrkSht.Range("A1").CurrentRegion.Address, _
Version:=xlPivotTableVersion15)
Debug.Print wrkBk.PivotCaches.Count
Set wrkSht2 = wrkBk.Worksheets.Add
wrkSht2.Name = "PivotTable"
Set pt = pc.CreatePivotTable( _
TableDestination:=wrkSht2.Range("A3"), _
TableName:="ReportPivot")
End Sub
另一答案
谢谢。这段代码成功了。 - 我用ActiveWorkbook替换了ThisWorkbook - 我将Sheet1.Name替换为ActiveSheet.Name - 我将Sheet1.Range替换为ActiveSheet.Range
'工作表(“Sheet1”)。激活
Set pc = ActiveWorkbook.PivotCaches.Create( _
SourceType:=xlDatabase, _
SourceData:=ActiveSheet.Name & "!" &
ActiveSheet.Range("A1").CurrentRegion.Address, _
Version:=xlPivotTableVersion15)
Debug.Print ActiveWorkbook.PivotCaches.Count
Worksheets.Add
ActiveSheet.Name = "PivotTable"
Range("A3").Select
Set pt = pc.CreatePivotTable( _
TableDestination:=ActiveCell, _
TableName:="ReportPivot")'
以上是关于Excel VBA。从Personal.xlsb创建数据透视表的主要内容,如果未能解决你的问题,请参考以下文章
在所有工作表中自动打开Excel文件到单元格A1(使用VBA)
Excel打开文件时,会同时打开一个空白Excel窗口,是怎么回事?
从 Excel VBA 运行工作参数化 Access SQL 查询 (INSERT INTO) 时出现“需要对象”错误