ChangePivotCache给出类型不匹配错误

时间:2017-05-23 18:00:18

标签: excel vba excel-vba pivot-table

我有一个宏,以前重置两个数据透视表的缓存没有任何错误。我只遇到其中一个表遇到运行时错误13类型不匹配,我不明白为什么它突然不能正常工作。当两个表的代码相同时,对于一个表也是如此。

Sub refresh_caches()

Dim cpt As PivotTable, chpt As PivotTable
Set ca2 = Sheets("claim edit").Range("A2")
Set cha2 = Sheets("chrg review").Range("A2")
Set cpc = Range(ca2.End(xlToRight), ca2.End(xlDown))
Set chpc = Range(cha2.End(xlToRight), cha2.End(xlDown))
Set cpt = Sheets("Formulas & Pivots").PivotTables("ptClaim")
Set chpt = Sheets("Formulas & Pivots").PivotTables("ptCharge")


cpt.ChangePivotCache ActiveWorkbook. _
        PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        cpc, Version:=xlPivotTableVersion15)

chpt.ChangePivotCache ActiveWorkbook. _
        PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        chpc, Version:=xlPivotTableVersion15)

For Each PivotCache In ActiveWorkbook.PivotCaches
    PivotCache.Refresh
    Next
End Sub

运行时错误正在changepivotcache代码上。当我单步执行并跳到chpt的第二个代码时,它会更新该表。

非常感谢任何帮助。

编辑数据源(数据连接)刷新后出现错误。即使直接将范围引用为sourcedata,我也会收到相同的错误。虽然如果我手动更改数据源,数据透视表会更新。

多么奇怪的是,当直接引用整个数据范围时,它会抛出错误,但如果我不引用每一行,它将更新表。

新编辑我相信我已经确定导致我的问题的一行,但我不完全理解为什么或者这是否是导致此问题的原因。我将问题缩小到确切的单元格,并且只要该范围中的任何单元格包含超过255个字符,它就会发生。我通过向单元格添加文本并提示错误来测试此范围内的其他单元格,同样我可以通过确保单元格的文本包含不超过255个字符来防止错误。

这是为什么?我可以手动选择数据范围并将其用作我的pivotcache,但是我无法让代码执行完全相同的操作。在Google上发现了超过255个字符的单元格的一些问题,但我仍然感到困惑,因为我没有具体引用该单元格,只是将其包含在一个范围内。非常感谢对此的一些见解,尤其是我可以在下次数据拉出单元格值超过此限制时找到解决方法。

2 个答案:

答案 0 :(得分:1)

虽然我仍然不完全理解为什么每当包含超过255个字符的单元格包含在数据范围内时代码出错,但它似乎确实是原因。

在设置PivotCache之前,我已经实现了一些代码来简单地识别单元格并将文本缩小到可接受的数量。

Dim c as Range
For each c in Range("SpecialtyClaimEdit") 'the name of my data connection
 If Len(c) > 255 Then
 c = Left(c, 255)
End If
Next

答案 1 :(得分:0)

出于某种原因,某些属性的excel似乎有255个字符的限制。

例如,我试图为我的UDF(用户定义的函数)设置描述,我发现它限制为255个字符。这是我的问题:Error while setting UDF description in VBA

此外,如果您尝试在一个单元格中编写超过255个字符的函数,则Excel无法处理它。看看这个帖子:Excel: Use formula longer that 255 characters

您现在所拥有的答案是有效的,但您还需要遍历所有单元格并松开/删除一些数据。我认为,制作新工作表并参考原始工作表中的单元格(例如,在您键入A1的新工作表的单元格='Formulas & Pivots'!A1中)也可能有效。然后,在代码中使用该工作表。您需要从原始工作表中获取数据透视表范围的地址,然后设置另一个范围,该范围在新工作表中相同。