【问题标题】:Excel VBA setting multiple sheets as a variableExcel VBA将多个工作表设置为变量
【发布时间】:2013-06-25 12:48:12
【问题描述】:

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

【问题讨论】:

    标签: excel vba


    【解决方案1】:

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

    Dim wSheet as Worksheet
    

    要么让它成为一个数组声明:

    Dim wSheet() as Worksheet
    

    或者让它变成这样的变体:

    Dim wSheet as Variant
    

    或者这个:

    Dim wSheet
    

    【讨论】:

      【解决方案2】:

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

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-01
        • 2021-02-14
        • 1970-01-01
        • 1970-01-01
        • 2012-03-30
        • 1970-01-01
        • 1970-01-01
        • 2021-08-20
        相关资源
        最近更新 更多