Excel VBA。从Personal.xlsb创建数据透视表

问题描述 投票:0回答:2

当模块直接导入工作簿时,代码完全正常。尝试从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")'
excel vba excel-vba pivot pivot-table
2个回答
0
投票

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

0
投票

谢谢。这段代码成功了。 - 我用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")'
© www.soinside.com 2019 - 2024. All rights reserved.