1

运行以下代码时出现不匹配错误 13。整个代码模块已经使用了一年多,几乎没有变化,我最近没有改变任何东西,而且我是这本工作簿的唯一用户。

非工作代码:

Private Sub CreateMIAPivots(MIABook As Workbook, MIASheet As Worksheet, MaxRow As Long)

Dim wksPivotSheet As Worksheet
Dim PivotRange As Range

    Set wksPivotSheet = MIABook.Sheets.Add
    wksPivotSheet.Name = "Summary"
    wksPivotSheet.Tab.Color = RGB(255, 0, 0)

    Set PivotRange = MIASheet.Range("A1:Y" & MaxRow)
    With MIABook.PivotCaches.Add(xlDatabase, PivotRange) 'Error sets here
    'More code below

MaxRow是可变的,但我已经根据大约 600 到大约 7,000 行的文件对其进行了检查,Range如果我尝试以任何其他方式与之交互,则该对象正在生成有效的引用。

我在这里回顾了一些相关的问题:

变通代码:

Private Sub CreateMIAPivots(MIABook As Workbook, MIASheet As Worksheet, MaxRow As Long)

Dim wksPivotSheet As Worksheet
Dim pc As PivotCache
Dim lVBAVer As Long
Dim PivotRange As Range

    lVBAVer = CLng(Application.Version)

    Set wksPivotSheet = MIABook.Sheets.Add
    wksPivotSheet.Name = "Summary"
    wksPivotSheet.Tab.Color = RGB(255, 0, 0)

    Set PivotRange = MIASheet.Range("A1:Y" & MaxRow)

    MIABook.Names.Add Name:="PivotRange", RefersTo:=PivotRange

    'Using answer from https://stackoverflow.com/a/11868231/698590 (StackOverflow) 
    'as a guide for version checking. Original answer of 
    'CLng(Application.VBE.Version) did not work here.
    #If lVBAVer <= 11 Then
        Set pc = MIABook.PivotCaches.Add(xlDatabase, "PivotRange")
    #Else
        Set pc = MIABook.PivotCaches.Create(xlDatabase, "PivotRange")
    #End If
    With pc
    'More code below

我现在的问题是为什么上述解决方案是必要的?似乎我不是唯一一个PivotCaches像我最初一样在使用时突然停止完美运行的代码的人。那么这里真正的根本原因是什么?是什么导致代码停止运行?

我想知道,如果可能的话,我可以防止将来出现意外错误。我知道答案可能在于我在代码/工作簿的其他地方所做的事情(此处未引用),但我无法终生追踪发生了什么变化。

4

1 回答 1

0

因此,您已经知道问题与此有关: http: //answers.microsoft.com/en-us/office/forum/office_2010-customize/pivotcache-type-mismatch-error-when-65536-rows/0827889e- b671-e011-8dfc-68b599b31bf5?msgId=4e3a2b20-7a72-e011-8dfc-68b599b31bf5

原因似乎是数据透视表的 VBA 语法/用法从 2003 年更改为 2007/2010 年。

所以它使用这个通用语法在工作簿中设置一个命名范围:

MIABook.Names.Add Name:="PivotRange", RefersTo:=PivotRange

这部分代码:

#If  lVBAVer <= 11 Then 
    Set pc = MIABook.PivotCaches.Add(xlDatabase, "PivotRange") 
#Else 
    Set pc = MIABook.PivotCaches.Create(xlDatabase, "PivotRange") 
#End If

正在检查 lVBAver 是否小于或等于 11,如果小于 - 那么它使用以下语法:

Set pc = MIABook.PivotCaches.Add(xlDatabase, "PivotRange")

如果是新版本,则使用以下语法:

Set pc = MIABook.PivotCaches.Create(xlDatabase, "PivotRange") 

有时你只需要接受微软并不完美(哈哈讽刺),他们像其他公司一样做愚蠢的事情。无论如何,这是我的理论。祝你好运。

于 2012-10-08T21:21:35.513 回答