【发布时间】:2020-04-29 12:20:35
【问题描述】:
我正在尝试循环一个将在所有工作表中运行的宏,“TOC”表除外。
- 每个工作表都将创建一个表格,格式化并放入公式。
但是,宏尝试从“TOC”表开始,这会导致错误。
我目前有:
Sub BrandRank_()
Dim wb As ThisWorkbook
Dim ws As Worksheet
Dim TableName As String
Dim LstObj As ListObjects
Dim LastRow As Long
For Each ws In ThisWorkbook.Worksheets
Select Case ws.Name
Case Is = "TOC"
Case Else
With ws
‘Insert Table
TableName = "MyTable"
Range("A3").CurrentRegion.Select
ActiveSheet.ListObjects.Add(xlSrcRange, Selection.CurrentRegion, , xlYes).Name = TableName
'Apply a filter to $ Share for all Brands (Largest to Smallest)
ws.AutoFilter.Sort.SortFields.Clear
ws.AutoFilter.Sort.SortFields.Add2 Key:=Range("C3"), SortOn:=xlSortOnValues, Order:=xlDescending
ws.AutoFilter.ApplyFilter
ActiveSheet.ListObjects("Table1").ShowAutoFilterDropDown = False
'More Table Formatting Code
End With
End Select
Next ws
End Sub`
以下更新以反映 Samuel Everson 的建议:
在我的场景中,Sheet1 (TOC) 是我想跳过的工作表。那么,我应该这样写代码吗..?
Sub LoopThroughWorkSheets_()
Dim wb As ThisWorkbook
Dim ws As Worksheet
Dim TableName As String
Dim LstObj As ListObjects
Set ws = ThisWorkbook.Sheets("Sheet2")
For Each ws In ThisWorkbook.Worksheets
Select Case ws.Names
Case Is = "TOC"
Case Else
With ws
'Insert Table with the Data starting in Column A, Row 3
TableName = "MyTable"
.Range("A3").CurrentRegion.Select
.ListObjects.Add(xlSrcRange, Selection.CurrentRegion, , xlYes).Name = TableName
'Apply a filter to C3 (Largest to Smallest)
.AutoFilter.Sort.SortFields.Clear
.AutoFilter.Sort.SortFields.Add2 Key:=Range("C3"), SortOn:=xlSortOnValues, Order:=xlDescending
.AutoFilter.ApplyFilter
.ListObjects("TableName").ShowAutoFilterDropDown = False
'Add a Formula to F4, and Copy Down to Last Row in F (Using Column A as the LastRowData Reference)
.Range("F4").Formula = "=(E4/(E4-G4))-1"
.Range("F4").NumberFormat = "0.0%"
.Range("F4").AutoFill Destination:=Range("F4:F" & Range("A" & Rows.Count).End(xlUp).Row)
'Update Number Format in Column E & G
.Columns("E").NumberFormat = "$#,##0"
.Columns("G").NumberFormat = "$#,##0"
End With
End Select
Next ws
End Sub
【问题讨论】:
-
问题是你实际上并没有使用
With ws。 -
但是
Range("A3").CurrentRegion.Select是有问题的@ScottHoltzman,因为它将在ActiveSheet上执行,这可能是ToC。 -
@BigBen - 100% 同意,但这不是 OP 询问的问题。他解决了第一个问题后,将是第二个问题! (哈哈哈)
-
我的猜测是这是一个 X-Y 问题... OP 认为当前设置应该是执行 X 的方法(即跳过 TOC 表),但实际问题 (Y) 是隐含的和显式
ActiveSheets. -
@BigBen - 好点。我认为你是 100% 正确的。您可以将该代码重构为答案。我正在签字。我太累了,看不到明显的东西。