Excel VBA为工作簿中的特定工作表设置循环
我运行一个月报,生成16个选项卡(15个工作表:“Report1”-“Report15”)。我已经创建了一个子表来创建/格式化一个表,并组织Sheet2(“Report1”)上的数据 目标: 由于表样式,我现在只想通过“Report1”、“Report4”、“Report7”、“Report10”、“Report13”循环宏 (一旦我弄明白了这一点,我将为其他工作表创建一个具有其他表格样式的宏。) 问题: 通过“google”我创建了下面的循环,但是“Set ws=Worksheets(Report1”)ws.active正在放弃它。 -我是否需要删除设置ws=工作表(Report1“) -我使用了ws.active,因为没有它宏似乎无法工作 宏:Excel VBA为工作簿中的特定工作表设置循环,excel,vba,Excel,Vba,我运行一个月报,生成16个选项卡(15个工作表:“Report1”-“Report15”)。我已经创建了一个子表来创建/格式化一个表,并组织Sheet2(“Report1”)上的数据 目标: 由于表样式,我现在只想通过“Report1”、“Report4”、“Report7”、“Report10”、“Report13”循环宏 (一旦我弄明白了这一点,我将为其他工作表创建一个具有其他表格样式的宏。) 问题: 通过“google”我创建了下面的循环,但是“Set ws=Worksheets(Repo
Option Explicit
Sub LoopThroughSpecificWorksheets()
'Turn Off Screen Updates
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim wb As Workbook: Set wb = ActiveWorkbook
Dim ws As Worksheet
Dim LstObj As ListObjects
Dim LastRow As Long
Dim Report, i
Report = Array("Report1", "Report4", "Report7", "Report10", "Report13")
For i = LBound(Report) To unbound(Report)
With ws(Report(i))
Set ws = Worksheets("Report1")
ws.Activate
'...Body of Maco
'Insert Table
'Remove Table Format
'Apply Tablestyle:
'Apply a filter to $ Share for all Brands (Largest to Smallest)
'Update $ - % Chg formula
'Update Units - % Chg Formula
'Change Header Names and Resize
End With
Next i
'Turn On Screen Updates
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
下面是一些循环工作表数组的VBA代码:
Sub sLoopArray()
Dim ws As Worksheet
Dim aReport As Variant
Dim lngLoop1 As Long
aReport = Array("Report1", "Report2")
For lngLoop1 = LBound(aReport) To UBound(aReport)
Set ws = Worksheets(aReport(lngLoop1))
With ws
End With
Next lngLoop1
End Sub
我已将unbound
的类型更改为UBound
,将循环计数器声明为Long(您将其作为可能导致问题的变量),并将数组从Report
重命名为aReport
(以避免与任何内置VBA名称“冲突”)
关于,可能有助于阅读,它也有很好的原则来避免
Actitvate
。最有可能的是,宏体没有引用带有ws(报告(i))的。您的For循环看起来是错误的。您确定它是未绑定的而不是UBound
?也可能是指设置ws=工作表(报告)(i) )
?并删除带有?@BigBen的行。我确实尝试避免使用选择和激活。但是,当我打开报告时,我在Sheet1(TOC)上。我需要宏在Sheet1上运行,然后在Sheet5、Sheet8、Sheet11、Sheet14之间循环。如果我不激活
Sheet2,它将尝试在Sheet1上运行宏。如何解决此问题?报表
不是对象模型的成员,可以安全使用。它不在Excel VBA库中,但在Access VBA库中,因此我正在尝试g到“futureproof”!!@Applecore我复制了您建议的代码,但它没有循环到下一个报告。它正在尝试再次循环“Report1”。@CariDay-我刚刚用调试运行了这个。打印以获得.Cells(1,1)
在带有ws…End With
的中,它会正确返回我在数组中设置的两个工作表的不同值。必须有其他原因导致它重新循环第一个元素。不要将Select或ACTIVE与更改当前工作表的代码混合使用。最好不要使用Select或ACTIVE在vba.a)中,@Apple core的代码片段在工作表中循环,但不会更改当前工作表。b)您的代码片段引用了当前工作表。a&b=>bug