Excel VBA 将多个工作表设置为变量

标签 excel vba

我有一本工作簿,用于多年的项目投资返回。我在 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 上失败...我尝试了几种变体,但它几乎总是在第二行失败(无论我是否使用工作表索引、工作表名称等)。有什么想法吗?

最佳答案

我无法获得第一个发布的答案。这是对我有用的方法,摘自 this question 的答案由用户@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

关于Excel VBA 将多个工作表设置为变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17297788/

相关文章:

python - XlsxWriter 条件格式不识别 "icon_style"参数

excel - 使用工作表列中的地址发送电子邮件

excel - 事件工作表名称按顺序更改

vba - Outlook 2007 中的 ItemSend 事件中的密件抄送不再有效

excel - ColdFusion 8总是打开.XLS,想要.XLSX

excel - 计算特定文本在数组中的次数

vba - 删除无法用 SpecialCells 抓取的行的最快方法

java - 写入长值以在 apache POI 中表现出色

excel - 动态设置用户窗体标签前景色

vba - Word 文档中的 getElementByID