【发布时间】: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 的创建分解为两个独立的事件。