Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Thema VBA: Bedingtes Ausblenden von Zeilen
#1
Moin moin,

ich habe folgendes Programm.

Ich habe einen Worksheet erstellt, der jedoch nicht funktioniert. Vielleicht könnt Ihr mir weiterhelfen. Ich möchte das wenn man in der Zelle F5 per Dropdown Menü ein Wert auswählt, bestimmte Zeilen ausgeblendet werden, jedoch funktioniert das leider nicht. Vielleicht kann mir einer ja sagen, wo der Fehler liegt! Wäre super!

Code:
VBA Code:

Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Address = "$F$5" Then
     If Target.Value = "gesetzl. pflichtversichert (KV)" Then
         Rows("11:12").Hidden = True
         Rows("29:33").Hidden = True
         Rows("35").Hidden = True
     Else
         Rows("11:12").Hidden = False
         Rows("29:33").Hidden = False
         Rows("35").Hidden = False
     End If
     
    ElseIf Target.Address = "$F$5" Then
     If Target.Value = "gesetzl. pflichtversichert (KV) inkl. Dienstwagen" Then
         Rows("29:33").Hidden = True
     Else
         Rows("29:33").Hidden = False
     End If
        
    ElseIf Target.Address = "$F$5" Then
     If Target.Value = "freiwillig gesetzl. versichert (KV)" Then
         Rows("11:12").Hidden = True
         Rows("19").Hidden = True
         Rows("22").Hidden = True
         Rows("35").Hidden = True
     Else
         Rows("11:12").Hidden = False
         Rows("19").Hidden = False
         Rows("22").Hidden = False
         Rows("35").Hidden = False
     End If
    
        ElseIf Target.Address = "$F$5" Then
     If Target.Value = "freiwillig gesetzl. versichert (KV) inkl. Dienstwagen" Then
         Rows("19").Hidden = True
         Rows("22").Hidden = True
     Else
         Rows("19").Hidden = False
         Rows("22").Hidden = False
     End If
    
        ElseIf Target.Address = "$F$5" Then
     If Target.Value = "privat versichert (KV)" Then
         Rows("11:12").Hidden = True
         Rows("19").Hidden = True
         Rows("22").Hidden = True
         Rows("35").Hidden = True
     Else
         Rows("11:12").Hidden = False
         Rows("19").Hidden = False
         Rows("22").Hidden = False
         Rows("35").Hidden = False
     End If
         
        ElseIf Target.Address = "$F$5" Then
     If Target.Value = "privat versichert (KV) inkl. Dienstwagen" Then
         Rows("19").Hidden = True
         Rows("22").Hidden = True
         Rows("35").Hidden = True
     Else
         Rows("19").Hidden = False
         Rows("22").Hidden = False
         Rows("35").Hidden = False
     End If
     End If
 End Sub
Antworten Top
#2
Hallo Nordlicht,

deine ElseIf-Zweige werden nie durchlaufen, da die Bedingung die gleiche wie die ursprüngliche If-Bedingung der gleichen Ebene ist.

Am Einfachsten ist es innerhalb der einfachen äusseren "If Target..." Verzwigung zuerst alle Zeile sichtbar machen und dann über eine "Select Case ..." Verzweigung die gewünschten Zeilen zu verbergen.
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





[-] Folgende(r) 1 Nutzer sagt Danke an Ego für diesen Beitrag:
  • Nordlicht85
Antworten Top
#3
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Address = "$F$5" Then
     Rows("11:12,19:19,22:22,29:33,35:35").EntireRow.Hidden = False
     Select Case Target.Value
        Case "gesetzl. pflichtversichert (KV)":                       a = "11:12,29:33,35:35"
        Case "gesetzl. pflichtversichert (KV) inkl. Dienstwagen":     a = "29:33"
        Case "freiwillig gesetzl. versichert (KV)":                   a = "11:12,19:19,22:22,35:35"
        Case "freiwillig gesetzl. versichert (KV) inkl. Dienstwagen": a = "19:19,22:22"
        Case "privat versichert (KV)":                                a = "11:12,19:19,22:22,35:35"
        Case "privat versichert (KV) inkl. Dienstwagen":              a = "19:19,22:22,35:35"
     End Select
     Rows(a).EntireRow.Hidden = True
   End If
End Sub
ungetestet. EntireRow fehlte. Und es heißt 35:35 statt 35 (meine ich). Sehr gefährlich die Klar-Inhalte bei Case!
[-] Folgende(r) 1 Nutzer sagt Danke an lupo1 für diesen Beitrag:
  • Nordlicht85
Antworten Top
#4
Hallöchen,

... und ergänzend - man müsste auch schauen, was man noch so an der Logik der ganzen Else's schrauben kann und sollte, weil ansonsten alle Elses durchlaufen werden. Eventuell kann man am Anfang alle Hiddens auf False setzen, also im Prinzip alles einblenden, das bekommt man eventuell mit einer codezeile hin - und dann nur noch bestimmte Zeilen ausblenden.

    If Target.Value = "gesetzl. pflichtversichert (KV)" Then
         Rows("11:12").Hidden = True
         Rows("29:33").Hidden = True
         Rows("35").Hidden = True
     Else
         Rows("11:12").Hidden = False
         Rows("29:33").Hidden = False
         Rows("35").Hidden = False
     End If
     
--> das weg:    ElseIf Target.Address = "$F$5" Then
     If Target.Value = "gesetzl. pflichtversichert (KV) inkl. Dienstwagen" Then
         Rows("29:33").Hidden = True
     Else
         Rows("29:33").Hidden = False
     End If

--> das weg:    ElseIf Target.Address = "$F$5" Then
usw.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • Nordlicht85
Antworten Top
#5
So:



Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$F$5" Then
        Rows("11:35").Hidden = False
        Select Case Target.Value
            Case "gesetzl. pflichtversichert (KV)"
                Rows("11:12").Hidden = True
                Rows("29:33").Hidden = True
                Rows("35").Hidden = True
            Case "gesetzl. pflichtversichert (KV) inkl. Dienstwagen"
                Rows("29:33").Hidden = True
            Case "freiwillig gesetzl. versichert (KV)"
                Rows("11:12").Hidden = True
                Rows("19").Hidden = True
                Rows("22").Hidden = True
                Rows("35").Hidden = True
            Case "freiwillig gesetzl. versichert (KV) inkl. Dienstwagen"
                Rows("19").Hidden = True
                Rows("22").Hidden = True
            Case "privat versichert (KV)"
                Rows("11:12").Hidden = True
                Rows("19").Hidden = True
                Rows("22").Hidden = True
                Rows("35").Hidden = True
            Case "privat versichert (KV) inkl. Dienstwagen"
                Rows("19").Hidden = True
                Rows("22").Hidden = True
                Rows("35").Hidden = True
        End Select
    End If
End Sub
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





[-] Folgende(r) 1 Nutzer sagt Danke an Ego für diesen Beitrag:
  • Nordlicht85
Antworten Top
#6
Tausend Dank für eure Hilfe, Helmuts letzter Beitrag hat mir die Lösung erbracht!
Antworten Top
#7
Hallo Nordlicht,

ich habe meinen zweiten Beitrag formuliert, als ich noch nicht lupos Lösung gesehen habe.

Über Lupos hervorragend komprimierter Lösung kann man zwar streiten wie verständlich sie für Anfänger ist, aber auch beim Einblenden vor der Case-Anweisung wahr er genauer.
Ich habe schlampiger Weise einfach alle Zeilen zwischen 11 und 35 eingeblendet, Lupo aber richtig nur die in deinem Beispiel vorkommenden.
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste