Excel VBA为工作簿中的特定工作表设置循环

Excel VBA为工作簿中的特定工作表设置循环,excel,vba,Excel,Vba,我运行一个月报,生成16个选项卡(15个工作表:“Report1”-“Report15”)。我已经创建了一个子表来创建/格式化一个表,并组织Sheet2(“Report1”)上的数据 目标: 由于表样式,我现在只想通过“Report1”、“Report4”、“Report7”、“Report10”、“Report13”循环宏 (一旦我弄明白了这一点,我将为其他工作表创建一个具有其他表格样式的宏。) 问题: 通过“google”我创建了下面的循环,但是“Set ws=Worksheets(Repo

我运行一个月报,生成16个选项卡(15个工作表:“Report1”-“Report15”)。我已经创建了一个子表来创建/格式化一个表,并组织Sheet2(“Report1”)上的数据

目标: 由于表样式,我现在只想通过“Report1”、“Report4”、“Report7”、“Report10”、“Report13”循环宏

(一旦我弄明白了这一点,我将为其他工作表创建一个具有其他表格样式的宏。)

问题: 通过“google”我创建了下面的循环,但是“Set ws=Worksheets(Report1”)ws.active正在放弃它。 -我是否需要删除设置ws=工作表(Report1“)

-我使用了ws.active,因为没有它宏似乎无法工作

宏:

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