2013-11-26 131 views
2

我有自動開啓並應用特殊紙張的保護,這允許分組和一些編輯特定表,程序數據的宏。我有宏是這樣的:應用保護片宏所有工作表中的工作簿

Private Sub Workbook_Open() 
    With Worksheets("Program Data") 
    .EnableOutlining = True 
    .Protect UserInterfaceOnly:=True, AllowFiltering:=True, AllowFormattingColumns:=True,  
    AllowInsertingRows:=True 
    End With 
End Sub 

眼下這個只要你打開該文件運行,但它僅適用於程序數據。我不知道如何更改with語句來容納整個工作簿,而無需一一命名工作表。但是有很多牀單,所以這不是一個好的選擇。我該如何將這個應用於文件中的所有表單?

+0

感謝這麼多的答案! –

回答

9

你想要一個For循環來定位所有的工作表。基本上...

Private Sub Workbook_Open() 
    Dim WS As Worksheet 
    For Each WS in ThisWorkbook.Worksheets 
    With WS 
    .EnableOutlining = True 
    .Protect UserInterfaceOnly:=True, AllowFiltering:=True, AllowFormattingColumns:=True,  
    AllowInsertingRows:=True 
    End With 
    Next WS 
End Sub 

讓我們知道這會有所幫助。

+0

+ 1中邦的目標:) –

+0

@Downvoter:護理評論? – Manhattan

10

你可以通過這樣的工作表對象(UNTESTED)循環。

Private Sub Workbook_Open() 
    Dim ws As Worksheet 

    For Each ws In ThisWorkbook.Worksheets 
     With ws 
      .EnableOutlining = True 
      .Protect UserInterfaceOnly:=True, AllowFiltering:=True, _ 
      AllowFormattingColumns:=True, AllowInsertingRows:=True 
     End With 
    Next 
End Sub 
+0

Gah,加快24秒。 :) – Manhattan

3

試試這個

For i = 1 To Worksheets.Count - 1 
    With Worksheets(i) 
     .EnableOutlining = True 
     .Protect UserInterfaceOnly:=True, AllowFiltering:=True, AllowFormattingColumns:=True,  AllowInsertingRows:=True 
    End With 
Next 
相關問題