ExcelVBA添加工作表:"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

它断行的行是第二行,即试图在工作簿开头添加工作表的行。对于记录,在所有选项卡上,选中的唯一单元格是单元格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

相关内容

最新更新