【问题标题】:Type mismatch error when creating a PivotCache创建 PivotCache 时出现类型不匹配错误
【发布时间】:2017-11-13 21:33:04
【问题描述】:

我正在尝试使用动态范围在新工作表上创建数据透视表,但收到一条错误消息:

运行时错误:13类型不匹配

用谷歌搜索错误,根据我的理解,代码包含不正确匹配的数据类型,但我无法弄清楚错误在哪里:

使用 Excel 2016。

Sub EEE()

 Dim PrevSheet As Worksheet
 Set PrevSheet = ActiveSheet

 Sheets.Add.Name = "Pivottable"
 PrevSheet.Select

 ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _
                                  SourceData:=ActiveSheet.UsedRange, _
                                  Version:=xlPivotTableVersion15).CreatePivotTable _
                                  TableDestination:="Pivottable!R3C1", _
                                  TableName:="PivotTable1", _
                                  DefaultVersion:=xlPivotTableVersion15

 Sheets("Pivottable").Select
 Cells(3, 1).Select

 With ActiveSheet.PivotTables("PivotTable1").PivotFields("Faculty")
 .Orientation = xlRowField
 .Position = 1
 End With

 With ActiveSheet.PivotTables("PivotTable1").PivotFields("NPS")
 .Orientation = xlColumnField
 .Position = 1
 End With        
End Sub

修改后的代码 - 工作

Sub EEE()

  Dim rng     As Range
  Dim pc      As PivotCache
  Dim pt      As PivotTable
  Dim ws      As Worksheet

   Set rng = ActiveSheet.Range("A1").CurrentRegion

   Set pc = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabaseSourceData:=rng.Address)
   Set ws = ActiveWorkbook.Worksheets.Add
   ws.Name = "NewSheet"
   Set pt = pc.CreatePivotTable(TableDestination:=Range("A3"),TableName:="pvttbl")

  With pt
     .PivotFields("Faculty").Orientation = xlRowField

      ActiveSheet.PivotTables("pvttbl").AddDataField ActiveSheet.PivotTable "pvttbl").PivotFields("NPS"), "Count of NPS", xlCount

     .PivotFields("NPS").Orientation = xlColumnField
  End With
End Sub

【问题讨论】:

  • 错误发生在哪一行?使用 F8 单步执行代码,查看发生错误时突出显示的行。
  • 尽可能避免使用 Activesheet,并通过其名称和工作表集合引用工作表。并尽可能避免使用 Select 并使用 With 语句
  • 整个“ActiveWorkbook.PivotCaches.Create....”被突出显示
  • 我会提出与 Jeffrey 刚刚指出的相同的观点,并且如果您使用 2016,您应该能够将 DefaultVersion:=6
  • 请注意,您的代码位是多余的。在下面查看我的答案以查看您可以跳过的部分。不需要选择东西,不需要设置 .Position,为了简单起见,可以将 PivotCache 的创建和 PivotTable 的创建分解为两个独立的事件。

标签: excel vba


【解决方案1】:

你没有说是哪一行给出了错误。但是有几个可能的罪魁祸首。 SourceData:=ActiveSheet.UsedRange 行说“嘿,用您在活动工作表上找到的所有内容制作数据透视表”。不是一个好主意。使用数据所在的确切范围。选择一个有数据块的单元格并使用 CurrentRegion 例如

SourceData:= Activesheet.Range("A1").CurrentRegion

...或者更好的是,在代码的前面将该 SourceData 转换为 Excel 表(即 ListObject),并引用该 ListObject:

SourceData:= "Table1"

如果您尝试多次运行代码并且您没有删除上次创建的名为“数据透视表”的工作表,您的代码也会失败。

下面是我的编码方式:

Option Explicit

Sub EEE()

Dim rng     As Range
Dim pc      As PivotCache
Dim pt      As PivotTable
Dim pf      As PivotField
Dim ws      As Worksheet

Set rng = Range("A1").CurrentRegion '<- Change to the address of the top left cell in your data.

Set pc = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=rng.Address)
Set ws = ActiveWorkbook.Worksheets.Add
Set pt = pc.CreatePivotTable(TableDestination:=Range("A1"))

With pt
    .PivotFields("Faculty").Orientation = xlRowField
    .PivotFields("NPS").Orientation = xlColumnField
End With


End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-19
    • 2023-03-17
    • 2016-01-23
    • 2013-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多