【问题标题】:ChangePivotCache giving type mismatch errorChangePivotCache 给出类型不匹配错误
【发布时间】:2017-05-23 18:00:17
【问题描述】:

我有一个宏,它之前重置了两个数据透视表的缓存,没有任何错误。我遇到了只有 1 个表的运行时错误 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 个字符来防止错误。

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

【问题讨论】:

  • 错误说明了什么。运行时 ?
  • 错误是类型不匹配。
  • 选择/激活该表并使用ActiveTable.Change.... 来查看您是否收到相同的错误。
  • 在我刷新作为数据透视缓存源的数据连接之前,运行脚本似乎没有问题。
  • 这是一个测试。不是解决方案。

标签: vba excel pivot-table


【解决方案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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

    • 哦,我想我明白了。使用第二张表用公式拉入超过255个字符的单元格值不会提示错误,因为单元格的实际值只有23个字符长?
    • @Awill 对,就是这样。
    • 这是一个聪明的解决方法,但在我的情况下,我将PivotCache 设置为不断变化的数据源。我拥有的长文本不是相关信息,因此缩短或替换它可能是一个更快的解决方案。我希望我也不会遇到很多这样的情况。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 2016-01-23
    相关资源
    最近更新 更多