Excel VBA +通过数组范围隐藏和/或取消隐藏表格

时间:2016-08-03 14:29:04

标签: excel-vba vba excel

我在工作簿中有多张工作表。

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

1 个答案:

答案 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