Excel 2010:
声明一下,这段代码已经工作了好几个月了。然而,过去两周,它已经停止工作,标题中描述的错误。在那段时间里,我没有对代码做任何修改,这让我相信是环境发生了变化。
Sub TableofContents(CurrMonth, CurrYear, Z, Region, RegionName)
Sheets.Add(Before:=Worksheets(1)).Name = "1. Table of Contents" '<---- BREAKS HERE
Cells.Select
With Selection.Font
.Name = "Calibri"
.Size = 11
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ThemeColor = xlThemeColorLight1
.TintAndShade = 0
.ThemeFont = xlThemeFontMinor
End With
With Columns("A:A")
.ColumnWidth = 6
.NumberFormat = "@"
End With
Columns("B:B").ColumnWidth = 48
Columns("C:E").ColumnWidth = 11
With Range("A3:E3")
.MergeCells = True
.Font.Color = vbBlack
.Font.Bold = True
.Value = "Table of Contents"
.HorizontalAlignment = xlCenter
.Font.Size = 12
End With
With Range("A5:B25")
.Font.Color = vbBlack
.Font.Bold = True
.Font.Size = 11
.HorizontalAlignment = xlRight
End With
Range("B:B").HorizontalAlignment = xlLeft
Select Case Region
[Lots of boring code filling in the TOC]
End Select
End Sub
它断行的行是第二行,即试图在工作簿开头添加工作表的行。对于记录,在所有选项卡上,选中的唯一单元格是单元格A1,并且没有工作表被分组在一起(Excel的标题栏没有说明分组)。我已经测试了隐藏页和非常隐藏页,没有一个存在。
在可能相关的说明上,代码的另一部分在工作簿的另一部分插入一个工作表,并且它将其放在错误的位置(我在表4之前告诉它,它将它放在表3之前)。再次,我检查了隐藏和非常隐藏的工作表,发现没有。
我开始认为最近的Excel更新中有一个破坏了代码。上次它禁用了我写的ActiveX控件,我不得不把所有东西都变成表单,这很烦人。我不确定如何解决这个错误。
问题出在工作簿中其他位置的数据透视缓存中。不知何故,它们已经损坏了(尽管不到10分钟),并且它们阻止任何新的选项卡添加到工作簿中。
因此,我编写了一个子例程,通过将SaveData变量设置为false来"擦除"工作簿中的所有枢轴缓存,然后保存文件。在代码的其他地方,它关闭并重新加载文件,然后运行该子例程的第二部分,将设置从False切换回True(通常需要先刷新),然后重新保存。
Sub RebuildAllPivotCaches(Switch)
ActiveWorkbook.RefreshAll
If Switch = "TurnOff" Then
For Temp = 1 To Worksheets.Count - 1
On Error GoTo SkipTemp
If Worksheets(Temp).Visible = True Then Worksheets(Temp).Activate
For Each PivTable In Worksheets(Temp).PivotTables
PivTable.RefreshTable
If ActiveSheet.PivotTables(PivTable.Name).SaveData = True Then ActiveSheet.PivotTables(PivTable.Name).SaveData = False
Next PivTable
SkipTemp:
Next Temp
ActiveWorkbook.Save
Else
For Temp = 1 To Worksheets.Count - 1
On Error GoTo SkipTemp2
If Worksheets(Temp).Visible = True Then Worksheets(Temp).Activate
For Each PivTable In Worksheets(Temp).PivotTables
PivTable.RefreshTable
If ActiveSheet.PivotTables(PivTable.Name).SaveData = False Then ActiveSheet.PivotTables(PivTable.Name).SaveData = True
Next PivTable
SkipTemp2:
Next Temp
ActiveWorkbook.Save
End If
End Sub