2017-08-02 9 views
0

現在、複数のドロップダウンセルに基づいて列を非表示にするループがあります。私は同じドロップダウンに基づいてシートを隠すコードを追加したいと思いますが、それに対応するためにFor Each Cell In Rangeにどのように追加するかわかりません。私は以下の列を非表示にしなければならないものを貼り付けました。どんな助けでも大歓迎です。ループを使用して列と複数のシートを非表示にする

Private Sub Worksheet_Change(ByVal Target As Range) 
Dim cell As Range 

For Each cell In Range("$A$30:$A$38") 

    If cell = "Descriptor 1" Or cell = "Descriptor 2" Then 
    Columns("B:F").EntireColumn.Hidden = False 
    Exit For 
    Else 
    Columns("B:F").EntireColumn.Hidden = True 
End If 
Next Cell 

答えて

1

あなたは再びそれを再表示するシートとWorksheets("sheet_to_unhide").Visible = xlSheetVisibleを非表示にするWorksheets("sheet_to_hide").Visible = xlSheetHiddenのようなものを使用することができます。 YowE3Kあなたのコード@

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim cell As Range 
    Dim HideIt As Boolean 

    'Don't do anything if there was no change to A30:A38 
    If Intersect(Target, Range("$A$30:$A$38")) Is Nothing Then Exit Sub 

    HideIt = True 
    For Each cell In Range("$A$30:$A$38") 
     If cell.Value = "Descriptor 1" Or _ 
      cell.Value = "Descriptor 2" Then 
      HideIt = False 
      Exit For 
     End If 
    Next cell 
    Columns("B:F").Hidden = HideIt 

    Dim ws As Worksheet 
    For Each ws In Worksheets 
     If ws.Name <> ActiveSheet.Name Then 
      'See if sheet name exists in A30:A38 
      'Hide the sheet if doesn't, make it visible if it does 
      ws.Visible = Not IsError(Application.Match(ws.Name, Range("$A$30:$A$38"), 0)) 
     End If 
    Next 
End Sub 
+0

お返事ありがとうございました!私はそれにショットを与え、あなたがそれがどのように動作するかを教えてあげよう! –

+0

だから私はそれを行った。それは私が望んでいたようには機能しませんでした。問題は私の説明です。私はそれぞれ9枚の独立したドロップダウンボックスのデータ検証リストに対応する名前の22枚を持っています。私は、記述子1と記述子2に基づいて列を隠すだけでなく、コードから独立して22の記述子のシートを非表示/非表示にして、9つのドロップダウンの独立した選択に基づいて列を非表示にする必要があります。独立したシート名がドロップダウンにない場合は、独立したシートを隠す必要があります。 –

+0

@il_Paco A30:A38が「Descriptor 1」または「Descriptor 2」のいずれかである場合、アクティブシートに列を表示したいと思います。また、アクティブなシートのA30:A38セルに名前が表示されないワークシート(アクティブシート以外)を非表示にするか、シートの名前がそのセルに表示されている場合はシートを表示させますか? – YowE3K

0

:ワークシートを非表示にしている場合

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim cell As Range 
    Dim HideIt As Boolean 

    HideIt = True 
    For Each cell In Range("$A$30:$A$38")  
     If cell.Value = "Descriptor 1" Or _ 
      cell.Value = "Descriptor 2" Then 
      HideIt = False 
      Exit For 
     End If 
    Next Cell 

    If HideIt Then 
     Columns("B:F").Hidden = True 
     Worksheets("Sheet1").Visible = xlSheetHidden 
     Worksheets("Sheet2").Visible = xlSheetHidden 
    Else 
     Columns("B:F").Hidden = False 
     Worksheets("Sheet1").Visible = xlSheetVisible 
     Worksheets("Sheet2").Visible = xlSheetVisible 
    End If 
End Sub 

は/自分のシート名があなたの範囲内に表示されるかどうかに応じて見えるように、私は次のような変形を示唆しています素晴らしいです。しかし、私は短い形式のタブ名と完全な形式の私の記述子に問題がありました。だから、元のコードを取り出し、各タブの "HideTab"を追加し、HideTab = Falseをtoplineに変更して、4行目のHideTab(下記参照)で逆にしました。私はより速い方法があると確信していますが、これは魅力のように機能しました。ご助力ありがとうございます!あなたは正しい方向に私を指差した。

Private Sub Worksheet_Change(ByVal Target As Range) 
Dim cell As Range 
Dim HideIt As Boolean 

HideIt = True 
    For Each cell In Range("$A$30:$A$38")  
     If cell.Value = "Descriptor 1" Or 
     cell.Value = "Descriptor 2" Then 
     HideIt = False 
     Exit For 
    End If 
Next Cell 
Columns("B:F").EntireColumn.Hidden = True 


Dim HideTab1 As Boolean 
    HideTab1 = False 
    For Each cell In Range("$A$30:$A$38") 
     If cell = "Descriptor1" Then 
      HideTab1 = True 
      Exit For 
     End If 
    Next cell 
    Sheets("Desc1").Visible = HideTab1 

Dim HideTab2 As Boolean 
    HideTab2 = False 
    For Each cell In Range("$A$30:$A$38") 
     If cell = "Descriptor2" Then 
      HideTab2 = True 
      Exit For 
     End If 
    Next cell 
    Sheets("Desc2").Visible = HideTab2 

Dim HideTab3 As Boolean 
    HideTab3 = False 
    For Each cell In Range("$A$30:$A$38") 
     If cell = "Descriptor3" Then 
      HideTab3 = True 
      Exit For 
     End If 
    Next cell 
    Sheets("Desc3").Visible = HideTab3 
End Sub 
関連する問題