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的标题栏没有说明分组)。我已经测试了隐藏床单和VeryHidden床单,但没有一张床单。
在MAYBE相关的注释中,代码的另一部分在工作簿的另一部分中插入了一个工作表,并且IT将它放在错误的位置(我在工作表4之前告诉它,它将它放在工作表3之前)。我再次检查了Hidden和VeryHidden表,但没有找到。
我开始认为其中一个最后的Excel更新破坏了代码。上次它禁用了我编写的ActiveX控件,我不得不将所有内容更改为表单,这很烦人。我不确定如何解决这个错误。
答案 0 :(得分:0)
问题出在工作簿中其他地方的Pivot Caches中。不知何故,他们已经损坏(尽管不到10分钟),他们阻止任何新标签被添加到工作簿。
所以,我写了一个子程序&#39;擦拭&#39;通过将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