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

时间:2016-05-24 11:13:47

标签: excel-vba runtime-error vba excel

我正在尝试使用我的数据执行一个简单的代码来创建数据透视表。

Sub PTable()
Dim PT As PivotTable
Dim PTCache As PivotCache
Dim rng As Range
Set rng = Range("A1", Range("A1").End(xlToRight).End(xlDown))
rng.Select

Set PTCache = ActiveWorkbook.PivotCaches.Create(xlDatabase, rng)
Sheets("New").Activate
Set PT = ActiveSheet.PivotTables.Add(PTCache, Range("A1"), "My_PT")
End Sub

运行时错误13,设置PTCache时抛出类型不匹配。每当我使用VBA在Excel上使用数据透视表时,这种情况就会频繁发生。

3 个答案:

答案 0 :(得分:0)

此字符串Set rng = Range("A1", Range("A1").End(xlToRight).End(xlDown))设置了非常大的范围"$1:$1048576"。 您可以在调试器中观看它:

Range("A1", Range("A1").End(xlToRight).End(xlDown)).Address
=> "$1:$1048576"

您想在ActiveWorkbook.PivotCaches.Create中使用该范围可能有问题吗?

请尝试使用此Microsoft's advice关于第二个参数PivotCache.Create

  

作为范围传递时,建议使用字符串   指定工作簿,工作表和单元格范围,或设置命名   范围并将名称作为字符串传递。传递范围对象可能   原因"类型不匹配"意外错误。

答案 1 :(得分:0)

另外,您可以尝试

Set rng = Range("A1").CurrentRegion

就像Ctrl + Shift + *而不是

Set rng = Range("A1", Range("A1").End(xlToRight).End(xlDown))

执行单个方法(即.CurrentRegion)而不是两个方法(即xlToRight后跟xlDown)可能会减少内存密集并解决类型不匹配故障。

答案 2 :(得分:0)

我和你有同样的问题。我的代码运行良好,直到行数超过60.000行,然后出现错误13:创建PivotCache时出现类型不匹配...

解决方案:不要使用Range变量来存储范围,而是将其存储在字符串变量中。这样(我不知道为什么),您可以避免发生该错误。该代码应该可以工作:

Sub PTable()
Dim PT As PivotTable
Dim PTCache As PivotCache
'Dim rng As Range
Dim LastRow As Long
Dim LastColumn As Long
Dim RangeString As String
Dim SheetName As String

'Set rng = Range("A1", Range("A1").End(xlToRight).End(xlDown))
'rng.Select

LastRow = UsedRange.Rows.Count
LastColumn = UsedRange.Columns.Count
SheetName = ActiveSheet.Name
RangeString = SheetName & "!R1C1:R" & LastRow & "C" & LastColumn

Set PTCache = ActiveWorkbook.PivotCaches.Create(xlDatabase, RangeString)
Sheets("New").Activate
Set PT = ActiveSheet.PivotTables.Add(PTCache, Range("A1"), "My_PT")
End Sub