2013-06-25 85 views
2

我有一個工作簿,用於多年的項目回報。我在ThisWorkbook中設置了一些代碼來鎖定結果工作表,但允許用戶打開或關閉列組(以允許他們隱藏或取消隱藏每年的月份列)。我目前的代碼,很好地工作,如下所示:Excel VBA將多個表格設置爲變量

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失敗......我嘗試了好幾種變體,但它幾乎總是,第二行上失敗(沒有不管我用板材指數,表格名稱等)。有什麼想法嗎?

回答

1

在你的代碼的問題是在第一行的聲明:

Dim wSheet as Worksheet 

要麼使其成爲一個數組聲明:

Dim wSheet() as Worksheet 

或使它像這樣的變異:

Dim wSheet as Variant 

or this:

Dim wSheet 
0

我無法獲得第一個發佈的答案。下面是對我有用的信息,摘自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 
相關問題