2

我有一本用于多年项目回报的工作簿。我在 ThisWorkbook 中设置了一些代码来锁定结果工作表,但允许用户打开或关闭列组(以允许他们隐藏或取消隐藏每年的月份列)。我当前的代码运行良好,如下所示:

Sheet10.Protect Password:="password", UserInterfaceOnly:=True
Sheet10.EnableOutlining = True

Sheet11.Protect Password:="password", UserInterfaceOnly:=True
Sheet11.EnableOutlining = True

依此类推,再增加 4 张纸(并且有效)。

我想做的是,定义一个存储工作表标识符的变量并在真实代码上运行 For Each / Next 循环。

但是我无法使不会引发一些编译或运行时错误的变量声明起作用。

我最喜欢的建筑是

Dim wSheet as Worksheet
wSheet = Array(Sheet10, Sheet11, Sheet14)

For Each wSheet in Workbook
    wSheet.Protect Password:="password", UserInterfaceOnly:=True
    wSheet.EnableOutlining = True
Next wSheet

但它在我的设置 wSheet 时失败了......我尝试了几种变体,但它几乎总是在第二行失败(不管我是否使用工作表索引、工作表名称等)。有什么想法吗?

4

2 回答 2

1

您的代码中的问题是第一行中的声明:

Dim wSheet as Worksheet

要么将其设为数组声明:

Dim wSheet() as Worksheet

或使其成为这样的变体:

Dim wSheet as Variant

或这个:

Dim wSheet
于 2013-06-25T13:04:04.177 回答
1

我无法获得第一个发布的工作答案。以下是对我有用的方法,取自用户@Dee对这个问题的回答:

Sub Test()
    Dim sheetsArray As Sheets
    Set sheetsArray = ActiveWorkbook.Sheets(Array("Sheet1", "Sheet2", "Sheet3"))

    Dim sheetObject As Worksheet

    ' change value of range 'a1' on each sheet from sheetsArray
    For Each sheetObject In sheetsArray
        'Do something
    Next sheetObject
End Sub
于 2017-08-07T17:12:43.163 回答