我在工作簿中有多张工作表。
NotToTouchSheet1,NotToTouchSheet2,NotToTouchSheet3,NotToTouchSheet4, HideOrToUnhideSheet1,HideOrToUnhideSheet2,...... ......,HideOrToUnhideSheet10
正如你在上面所看到的,无论发生什么事情我都不想隐藏的表格,以及根据条件隐藏或取消隐藏的表格。
条件是,当用户从组合框中选择一个值时,组合框列出了从数组中吐出的工作表名称。
我的问题是,考虑到我拥有的纸张数量,如何隐藏那些不在范围/数组中的那些加上我不希望它们隐藏的那些'NotToTouchSheet'。
例如,用户从组合框列表中选择“A”。 'A'值由HideOrToUnhideSheet1,HideOrToUnhideSheet3,HideOrToUnhideSheet5组成。因此,我想要'NotToTouchSheet'表格,包括'HideOrToUnhideSheet1,3和5'来显示,其余的要隐藏。
当用户从组合框列表中选择“B”时。 'B'值由HideOrToUnhideSheet8,HideOrToUnhideSheet9,HideOrToUnhideSheet10组成。因为,这些工作表是隐藏的,我想隐藏它,并隐藏HideOrToUnhideSheet1,3和5.
我希望上面的例子可以帮助你理解和想象我想要完成的事情。
myArray = Split(blah, "|")
inputCell = 4
For Each sht In Worksheets
For myArrayIndex = LBound(myArray) + 1 To UBound(myArray) - 1
commName = Replace(myArray(myArrayIndex), " Consol", "")
If (sht.Tab.Color = 192 Or sht.Tab.Color = 5296274) And (sht.Name Like "* Consol" Or sht.Name Like "* Detail") Then
if the above condition is true, hide those sheets that are not in the array PLUS those 'NotToTouchSheet'
End If
Next myArrayIndex
Next sht
答案 0 :(得分:0)
能够通过隐藏'来解决它。工作表然后另一个循环来检查工作表是否是我想要取消隐藏的。
myArray = Split(blah, "|")
inputCell = 4
For Each sht In Worksheets
If (sht.Tab.Color = 192 Or sht.Tab.Color = 5296274) And (sht.Name Like "* Consol" Or sht.Name Like "* Detail") Then
sht.Visible = xlSheetHidden
End If
Next sht
For Each cell In myArray
If cell <> "" Then
dtlCommName = Replace(cell, " Consol", " Detail")
If Sheets(cell).Visible = xlSheetHidden Or Sheets(dtlCommName).Visible = xlSheetHidden Then
Sheets(cell).Visible = xlSheetVisible
Sheets(dtlCommName).Visible = xlSheetVisible
End If
Sheets("Consolidation Summary").Range("AB" & inputCell).Value = cell
inputCell = inputCell + 1
End If
Next cell