运行以下代码时出现不匹配错误 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
如果我尝试以任何其他方式与之交互,则该对象正在生成有效的引用。
我在这里回顾了一些相关的问题:
- 我只在 2003 年工作,无论如何,错误是不同的。
PivotCaches
在尝试创建新工作簿之前,我已确认工作簿中没有其他内容。- 我已经使用此处接受的解决方案成功完成了这项工作:使用命名范围(请参阅下面的后续代码)
变通代码:
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
像我最初一样在使用时突然停止完美运行的代码的人。那么这里真正的根本原因是什么?是什么导致代码停止运行?
我想知道,如果可能的话,我可以防止将来出现意外错误。我知道答案可能在于我在代码/工作簿的其他地方所做的事情(此处未引用),但我无法终生追踪发生了什么变化。