2016-08-03 11 views
0

ブックに複数のシートがあります。Excel VBA +配列を使用してシートを非表示または再表示する

NotToTouchSheet1、NotToTouchSheet2、NotToTouchSheet3、NotToTouchSheet4、 HideOrToUnhideSheet1、HideOrToUnhideSheet2、... ... ...、HideOrToUnhideSheet10

あなたが上見ることができるように、私はどんな隠しませんしたくないシートがあります条件が与えられれば、シートは隠すか隠すかのいずれかになります。

条件は、ユーザーがコンボボックスから値を選択すると、コンボボックスがシート名を列挙し、配列から吐き出された状態です。

私の質問は、私が持っているシートの枚数を考えれば、範囲/配列にないものを非表示にする方法と、NotToTouchSheetを非表示にしたくないものです。

たとえば、ユーザーはコンボボックスリストから「A」を選択します。 'A'値は、HideOrToUnhideSheet1、HideOrToUnhideSheet3、HideOrToUnhideSheet5で構成されます。したがって、私は 'HideToTouchSheet'シートを '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

シートを「隠す」ことで問題を解決できました。次に、シートが再表示したいものかどうかを確認するためにループを確認できました。

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 
関連する問題