我有一本工作簿,用于多年的项目投资返回。我在 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/