2013-11-26 85 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 
相关问题