PivotCaches.Add不匹配错误 – 为什么之前没有发生?

运行下面的代码时出现不匹配错误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到大约7000行的文件,如果我尝试以任何其他方式与其交互,则Range对象将生成一个有效的引用。

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

  • 我只在2003年工作,而且错误是不同的。
  • 在尝试创build新工作簿之前,我已经确认在工作簿中没有其他PivotCaches
  • 我已经成功地使用这里接受的解决scheme来获得这个工作:使用命名的范围(参见下面的后续代码)

解决方法代码:

 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 

我的问题是现在为什么上面的解决scheme是必要的? 看起来我并不是唯一一个在使用PivotCaches突然停止了完美工作的代码,就像我最初一样。 那么这里真正的根源是什么呢? 什么导致代码停止运作?

我想知道,如果可能的话,我可以防止未来出现的意外错误。 我知道答案可能在于我在代码/工作簿(这里没有引用)的其他地方做的事情,但是我不能在我的生活中find改变的东西。

因此,您已经知道问题与此有关: 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") 

有时你不得不接受微软并不完美(大声笑),他们做愚蠢的事情就像其他公司一样。 无论如何,这是我的理论。 祝你好运。