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
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