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 Case
anstelle 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