2016-04-11 15 views
2

VBAコーディングが初めてで、ワークブック内に有効/無効のタブを表示/非表示するスプレッドシートを作成できました。 。別のワークシートのセル条件に基づいて列を自動的に非表示にする

スプレッドタブで提供される「はい/いいえ」応答が自動他のシートの列を非表示にするように、ブックをさらに絞り込む必要があります。私はこのコードを使用このウェブサイト上の前のスレッドを使用して、タブの1に(明らかに私の自身の細胞レフリーのための改正):

B6で
Private Sub Worksheet_Change(ByVal Target As Range) 
    If Target.Address = "$B$6" Then 
     Select Case Target.Value 
     Case Is = "Cast" 
      Columns("f").EntireColumn.Hidden = False 
      Columns("d").EntireColumn.Hidden = True 
      Columns("e").EntireColumn.Hidden = True 
     Case Is = "LDF" 
      Columns("f").EntireColumn.Hidden = True 
      Columns("d").EntireColumn.Hidden = False 
      Columns("e").EntireColumn.Hidden = False 
     Case Is = "Select ROV Type" 
      Columns("f").EntireColumn.Hidden = False 
      Columns("d").EntireColumn.Hidden = False 
      Columns("e").EntireColumn.Hidden = False 
     End Select 

、私はスコープから通じプル式(= Name)を持っていますタブ。上記のコードは動作しますが、データを再プルするためにセルを手動で入力する場所のみです。ヒント: - セル参照をバイパスして、マクロ内の元のスコープタブにリンクします。列の非表示を自動化するには?

答えて

0

一番簡単な方法は、必要なところ、このようなあなたのコードを編集しているようだ:

Sheet2.Columns("f").EntireColumn.Hidden = False 

のSheet2に列を非表示にするシートです。

+1

これは素晴らしい、ありがとう。このコード行を元のスコープタブに追加しました。ブリリアント。 – BGr27

0

私が正しくあなたのニーズは次のように行くと解釈した場合、「はThisWorkbook」コードウィンドウの代わりに

を次の次のコード:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) 

    Application.EnableEvents = False 
    With Sheets("scoping sheet") '<== here you set which sheet you want to monitor 
     If .Range("B6") <> .Range("A1") Then '<== check if the "formula" cell changed its previous value, stored in the "echo" cell ("A1") 

      Select Case .Range("B6").Value 
       Case Is = "Cast" 
        .Columns("f").EntireColumn.Hidden = False 
        .Columns("d").EntireColumn.Hidden = True 
        .Columns("e").EntireColumn.Hidden = True 
       Case Is = "LDF" 
        .Columns("f").EntireColumn.Hidden = True 
        .Columns("d").EntireColumn.Hidden = False 
        .Columns("e").EntireColumn.Hidden = False 
       Case Is = "Select ROV Type" 
        .Columns("f").EntireColumn.Hidden = False 
        .Columns("d").EntireColumn.Hidden = False 
        .Columns("e").EntireColumn.Hidden = False 
      End Select 

      .Range("a1") = .Range("b6") '<== update the "echo" cell value for subsequent checking 

     End If 
    End With 
    Application.EnableEvents = True 

End Sub 

見ての通り、あなたは」の「エコー」のセルを選択する必要があります「B6」セルの前の値を格納するために使用される「スコープ」シートを含む。

私のコードでは、「スコープ」シートの「エコー」セルとしてセル「A1」を選択しましたが、「フリー」セルであれば必要なアドレスを選択できます(つまり、それに応じてコードを変更してください(つまり"A1"のアドレスはIf .Range("B6") <> .Range("A1") Thenとなります)。

関連する問題