是否有可能比较对象属性与集合中的对象?

这是我正在尝试使用的代码。 当单击显示/隐藏表单时,应该展开和折叠多个表单。 我有一个这样的工作迭代,但工作簿将超过200张表完成后,我希望将这些指定为集合,我可以引用,而不是指向每个工作表应特别展开或折叠。 第二个for循环是我如何在我的另一个迭代中设置代码,它的工作原理,想知道是否有办法让第一个循环工作。 干杯!

Private Sub Worksheet_Activate() Dim sheet As Worksheet Dim col1 As New Collection Dim col2 As New Collection col1.Add (BASE1) And (Cap1) And (A1) And (A2) And (CAP0) And (BASE0) And (Sheet13) col2.Add (BASE0) And (CAP0) And (BASE1) And (Cap1) And (BASE2) And (Cap2) And (Sheet13) Application.ScreenUpdating = False If Sheet13.Name = "Show" Then For Each sheet In ThisWorkbook.Sheets If (sheet.Name <> col2) Then sheet.Visible = xlSheetVisible End If Next sheet Sheet13.Name = "Collapse" Sheet3.Activate Else For Each sheet In ThisWorkbook.Sheets If (sheet.Name <> Sheet1.Name And sheet.Name <> Sheet2.Name And sheet.Name <> Sheet3.Name And sheet.Name <> Sheet13.Name And sheet.Name <> Sheet7.Name) Then sheet.Visible = xlSheetVeryHidden End If Next sheet Sheet13.Name = "Show" Sheet3.Activate End If Application.ScreenUpdating = True End Sub 

希望这将有助于澄清我的问题。 以下代码是上述代码的当前工作版本,不使用集合。 正如你所看到的,要展开和折叠的图纸是特别引用的。 我想要做的是如果sheet.Name <>(集合1中的任何工作表)然后

 Private Sub Worksheet_Activate() Dim sheet As Worksheet Application.ScreenUpdating = False If Sheet8.Name = "702 BASE - EXPAND" Then For Each sheet In ThisWorkbook.Sheets If (sheet.Name <> Sheet4.Name And sheet.Name <> Sheet5.Name And sheet.Name <> Sheet6.Name And sheet.Name <> Sheet14.Name And sheet.Name <> Sheet15.Name And sheet.Name <> Sheet16.Name And sheet.Name <> Sheet17.Name And sheet.Name <> Sheet18.Name And sheet.Name <> Sheet19.Name And sheet.Name <> Sheet20.Name And sheet.Name <> Sheet21.Name And sheet.Name <> Sheet22.Name And sheet.Name <> Sheet23.Name And sheet.Name <> Sheet24.Name And sheet.Name <> Sheet25.Name And sheet.Name <> Sheet26.Name) Then sheet.Visible = xlSheetVisible End If Next sheet Sheet8.Name = "702 BASE - COLLAPSE" Sheet8.Activate Else For Each sheet In ThisWorkbook.Sheets If (sheet.Name <> Sheet4.Name And sheet.Name <> Sheet8.Name And sheet.Name <> Sheet1.Name And sheet.Name <> Sheet2.Name And sheet.Name <> Sheet3.Name And sheet.Name <> Sheet7.Name) Then sheet.Visible = xlSheetVeryHidden End If Next sheet Sheet8.Name = "702 BASE - EXPAND" Sheet1.Activate End If Application.ScreenUpdating = True End Sub 

下面是您的代码的简化版本,以说明一种可能的方法:

 Private Sub Worksheet_Activate() Dim sheet As Worksheet Dim arr1, arr2 arr1 = Array(BASE1, Cap1, A1, A2, CAP0, BASE0, Sheet13) Application.ScreenUpdating = False If Sheet13.Name = "Show" Then '<< can use "Me.Name" if code is in Sheet13 module... For Each sheet In ThisWorkbook.Sheets If Not InArray(sheet, arr1) Then sheet.Visible = xlSheetVisible Next sheet Sheet13.Name = "Collapse" Sheet3.Activate End If Application.ScreenUpdating = True End Sub 

用于检查工作表是否位于提供的数组中的实用程序函数。 应该在一个正规的代码模块中进行。

 'is a sheet in the provided array? Function InArray(sht As Worksheet, arr) Dim s, rv As Boolean For Each s In arr If s.Name = sht.Name Then rv = True Exit For End If Next s InArray = rv End Function