将受保护的工作表macros应用于工作簿中的所有工作表

我有一个自动打开的macros,并应用一个特殊的表单保护,允许分组和编辑一个特定的表格,程序数据。 我拥有的macros是这样的:

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

现在,只要您打开文件,它就会运行,但它只适用于程序数据。 我不知道如何更改with语句来容纳整个工作簿,而无需一一命名工作表。 但是有很多床单,所以这不是一个好的select。 我如何做到这一点应用于文件中的所有表单?

你需要一个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 

让我们知道这是否有帮助。

你可以像这样( 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 

尝试这个

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