【问题标题】:Excel VBA. Creating Pivot Table from Personal.xlsbExcel VBA。从 Personal.xlsb 创建数据透视表
【发布时间】:2018-02-28 08:37:04
【问题描述】:

当模块直接导入工作簿时,代码工作得很好。 尝试从 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")'

【问题讨论】:

  • Personal.xlsb 是您要在其中运行上述代码的工作簿的名称吗?错误发生在哪一行?

标签: vba excel pivot pivot-table


【解决方案1】:

Thisworkbook 始终引用保存代码的工作簿 - 在本例中是您的个人工作簿。相反,您可能想引用Activeworkbook

在下面的代码中,我在变量声明之后设置了对 ActiveWorkbook 的引用。 PivotCache、Pivo​​tTable 和任何公式都引用 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

【讨论】:

  • 我就是这么想的!
  • 没想到他会希望它出现在个人工作簿中,因为它通常是隐藏的。保存代码和查找列表的好地方,仅供个人使用。
  • 我不知道为什么我还没有探索过这样做。我仍然与恐龙和“GoTo”在一起
  • 想想我最后一次使用“GoTo”是在 80 年代 Sinclair Basic :D
【解决方案2】:

谢谢。这段代码成功了。 - 我用 ActiveWorkbook 替换了 ThisWorkbook - 我用 ActiveSheet.Name 替换了 Sheet1.Name - 我用 ActiveSheet.Range 替换了 Sheet1.Range

' Worksheets("Sheet1").Activate

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")'

【讨论】:

    猜你喜欢
    • 2015-10-22
    • 1970-01-01
    • 2018-03-29
    • 1970-01-01
    • 2019-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多