VBA-Code zum Ausblenden/Einblenden von Zeilen basierend auf einzelnen Zellenwerten

VBA-Code zum Ausblenden/Einblenden von Zeilen basierend auf einzelnen Zellenwerten

Ich verstehe nicht ganz, warum mein Code nicht funktioniert. Im Wesentlichen habe ich in Zelle B5 zwei Optionen, „calc_1“ und „calc_2“, die der Benutzer über die Dropdown-Liste auswählen kann.

Ich möchte, dass die Zeilen 6 bis 29 angezeigt und die Zeilen 30 bis 53 ausgeblendet werden, wenn calc_1 ausgewählt ist, und umgekehrt für calc_2. Unten ist der Code, den ich geschrieben habe:

Private Sub Worksheet_Change(ByVal Target As Range)

    If Range("B5").Value = "calc_1" Then
        Rows("6:29").EntireRow.Hidden = False
        Rows("30:53").EntireRow.Hidden = True
        

    ElseIf Range("B5").Value = "calc_2" Then
        Rows("6:29").EntireRow.Hidden = True
        Rows("30:53").EntireRow.Hidden = False

    End If

End Sub

Wenn ich diesen Code ausführe, werden unabhängig von meiner Auswahl nur die Zeilen 6 bis 29 angezeigt. Ich bin nicht sicher, was ich hier übersehe.

Antwort1

Arbeitsblatt ändern und schneiden

  • Der Code wurde bei jeder Änderung im Arbeitsblatt ausgeführt. Sie müssen ihn so einschränken, dass er nur ausgeführt wird, wenn eine Änderung in der Zelle erfolgt ist B5...

    If not Intersect(Range("B5"), Target) Is Nothing Then
        ' do your stuff
    End If
    

    ... oder wie im Code:

    If Intersect(Range("B5"), Target) Is Nothing Then Exit Sub
    
    ' do your stuff
    
  • EntireRow ist in diesem Fall redundant, wie harrymc in den Kommentaren erwähnt hat.

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    
    Dim iCell As Range: Set iCell = Intersect(Range("B5"), Target)
    If iCell Is Nothing Then Exit Sub
    
    If iCell.Value = "calc_1" Then
        Rows("6:29").Hidden = False
        Rows("30:53").Hidden = True
    ElseIf iCell.Value = "calc_2" Then
        Rows("6:29").Hidden = True
        Rows("30:53").Hidden = False
    'Else ' do nothing
    End If

End Sub

Optional können Sie Select Caseanstelle von verwenden If ElseIf.

Select Case iCell.Value
Case "calc_1"
    Rows("6:29").Hidden = False
    Rows("30:53").Hidden = True
Case "calc_2"
    Rows("6:29").Hidden = True
    Rows("30:53").Hidden = False
'Case Else ' do nothing
End Select

verwandte Informationen