Excel VBA 添加工作表:"That command cannot be used on multiple selections"

Excel VBA Add Worksheet: "That command cannot be used on multiple selections"

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

它中断的行是第二行,该行试图在工作簿的开头添加 sheet。作为记录,在所有选项卡上,唯一选定的单元格是单元格 A1,并且没有 sheet 分组在一起(Excel 的标题栏没有说明分组)。我已经测试了 Hidden sheets 和 VeryHidden sheets 和 none 存在。

在 MAYBE 相关的注释中,代码的另一部分在工作簿的另一部分插入了一个 sheet 并且它把它放在了错误的位置(我在 Sheet 4 之前告诉它,它把它放在 Sheet 3) 之前。我再次检查了 Hidden 和 VeryHidden sheets 并找到了 none.

我开始认为最后的 Excel 更新之一破坏了代码。上次它禁用了我编写的 ActiveX 控件,我不得不将所有内容更改为表单,这很烦人。我不确定如何解决此错误。

问题出在工作簿其他地方的数据透视缓存中。它们不知何故已损坏(尽管还不到 10 分钟)并且它们阻止将任何新选项卡添加到工作簿。

因此,我编写了一个子例程,通过将 SaveData 变量设置为 false,然后保存文件,'wipes' 工作簿中的所有数据透视缓存。在代码的其他地方,它关闭并重新加载文件,然后运行该子例程的第二部分,将设置从 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