Clever-Excel-Forum

Normale Version: Zeilen per VBA ausblenden
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo Zusammen,

ich hoffe, Ihr könnt mir bei meinem Problem weiterhelfen. Ich erstelle gerade ein Formular, bei dem je nach Auswahl gewisser Werte in mehreren Zellen unterschiedliche Zeilen ein bzw. ausgeblendet werden müssen. Aktuell habe ich dies über nachfolgenden Code gelöst. Leider läuft das ganze noch nicht sauber durch. Da immer der vollständige Code durchlaufen wird, kommt es manchmal vor, dass falsche Zeilen ein bzw. ausgeblendet werden. Kann man das vielleicht besser lösen, in dem z.B. bei einer erfüllten Bedingung nach Ausführung der Einblendung/Ausblendung zum Ende hin gesprungen wird bzw. bei einer nicht erfüllten Bedingung im Code weitergegangen wird.

Wäre super wenn jemand weiß, wie das besser zu lösen wäre.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)



'Unterschriften
'Unterschrift "Projektantrag an die Planungsrunde"
If Range("O15") <> "Projektantrag an die Planungsrunde" Then Rows("141:145").Hidden = False
If Range("O15") = "Projektantrag an die Planungsrunde" Then Rows("141:145").Hidden = True

If Range("O15") <> "Projektantrag an die Planungsrunde" Then Rows("150:191").Hidden = False
If Range("O15") = "Projektantrag an die Planungsrunde" Then Rows("150:191").Hidden = True

'Unterschrift "Projektantrag Allgemein, Organisation (<25)"
If Range("O15") <> "Projektantrag Allgemein" And Range("O14") = "Organisationsprojekt" And Worksheets("Entscheidungstabelle").Range("V9") = "Ja" Then Rows("146:149").Hidden = False
If Range("O15") = "Projektantrag Allgemein" And Range("O14") = "Organisationsprojekt" And Worksheets("Entscheidungstabelle").Range("V9") = "Ja" Then Rows("146:149").Hidden = True

If Range("O15") <> "Projektantrag Allgemein" And Range("O14") = "Organisationsprojekt" And Worksheets("Entscheidungstabelle").Range("V9") = "Ja" Then Rows("154:191").Hidden = False
If Range("O15") = "Projektantrag Allgemein" And Range("O14") = "Organisationsprojekt" And Worksheets("Entscheidungstabelle").Range("V9") = "Ja" Then Rows("154:191").Hidden = True

'Unterschrift "Projektantrag Allgemein, Organisation (>25<100)"
If Range("O15") <> "Projektantrag Allgemein" And Range("O14") = "Organisationsprojekt" And Worksheets("Entscheidungstabelle").Range("V10") = "Ja" Then Rows("146:153").Hidden = False
If Range("O15") = "Projektantrag Allgemein" And Range("O14") = "Organisationsprojekt" And Worksheets("Entscheidungstabelle").Range("V10") = "Ja" Then Rows("146:153").Hidden = True

If Range("O15") <> "Projektantrag Allgemein" And Range("O14") = "Organisationsprojekt" And Worksheets("Entscheidungstabelle").Range("V10") = "Ja" Then Rows("159:191").Hidden = False
If Range("O15") = "Projektantrag Allgemein" And Range("O14") = "Organisationsprojekt" And Worksheets("Entscheidungstabelle").Range("V10") = "Ja" Then Rows("159:191").Hidden = True

'Unterschrift "Projektantrag Allgemein, Organisation (>100)"
If Range("O15") <> "Projektantrag Allgemein" And Range("O14") = "Organisationsprojekt" And Worksheets("Entscheidungstabelle").Range("V11") = "Ja" Then Rows("146:158").Hidden = False
If Range("O15") = "Projektantrag Allgemein" And Range("O14") = "Organisationsprojekt" And Worksheets("Entscheidungstabelle").Range("V11") = "Ja" Then Rows("146:158").Hidden = True

If Range("O15") <> "Projektantrag Allgemein" And Range("O14") = "Organisationsprojekt" And Worksheets("Entscheidungstabelle").Range("V11") = "Ja" Then Rows("168:191").Hidden = False
If Range("O15") = "Projektantrag Allgemein" And Range("O14") = "Organisationsprojekt" And Worksheets("Entscheidungstabelle").Range("V11") = "Ja" Then Rows("168:191").Hidden = True

'Unterschrift "Projektauftrag Allgemein, Software, <100"
If Range("O15") <> "Projektantrag Allgemein" And Range("O14") = "Softwareeinführung" And Worksheets("Entscheidungstabelle").Range("V12") = "Ja" Then Rows("146:167").Hidden = False
If Range("O15") = "Projektantrag Allgemein" And Range("O14") = "Softwareeinführung" And Worksheets("Entscheidungstabelle").Range("V12") = "Ja" Then Rows("146:167").Hidden = True

If Range("O15") <> "Projektantrag Allgemein" And Range("O14") = "Softwareeinführung" And Worksheets("Entscheidungstabelle").Range("V12") = "Ja" Then Rows("173:191").Hidden = False
If Range("O15") = "Projektantrag Allgemein" And Range("O14") = "Softwareeinführung" And Worksheets("Entscheidungstabelle").Range("V12") = "Ja" Then Rows("173:191").Hidden = True

'Unterschrift "Projektauftrag Allgemein, Software, >100"
If Range("O15") <> "Projektantrag Allgemein" And Range("O14") = "Softwareeinführung" And Worksheets("Entscheidungstabelle").Range("V12") = "Nein" Then Rows("146:172").Hidden = False
If Range("O15") = "Projektantrag Allgemein" And Range("O14") = "Softwareeinführung" And Worksheets("Entscheidungstabelle").Range("V12") = "Nein" Then Rows("146:172").Hidden = True


Sprung:

End Sub

Gruß
Michael
Hallo Michael,
ungetestet und ohne Gewähr als Vorschlag:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
'keine Aktion, wenn Änderung nicht in O15 oder O14
  If Target.Column = 15 And Target.Row = 14 Or Target.Row = 15 Then CheckHide (ActiveSheet.Name)
End Sub

'es muss ebenso im Sheet "Entscheidungstabelle" geben
Private Sub Worksheet_Change(ByVal Target As Range)
'keine Aktion, wenn Änderung nicht in V9 bis V12
  If Target.Column = 22 And Target.Row >= 9 And Target.Row <= 12 Then CheckHide ("unbekannt")
  'statt unbekannt sollte der Name des anderen Sheets stehen!!!!!!!!!!!
End Sub

'Das folgende Sub muss in ein allgemeines Modul
Sub CheckHide(OSheet As String)
'Unterschriften
  With ThisWorkbook.Sheets(OSheet)
    Select Case .Range("O15")
    Case "Projektantrag an die Planungsrunde"
    'Unterschrift "Projektantrag an die Planungsrunde"
      .Rows("141:145").Hidden = True
      .Rows("150:191").Hidden = True
    Case "Projektantrag Allgemein"
      Select Case .Range("O14")
      Case "Organisationsprojekt"
        .Rows("146:158").Hidden = True
        .Rows("154:191").Hidden = True
        'Unterschrift "Projektantrag Allgemein, Organisation (<25)"
        If ThisWorkbook.Sheets("Entscheidungstabelle").Range("V9") = "Ja" Then
          .Rows("146:149").Hidden = False
          .Rows("154:191").Hidden = False
        'Unterschrift "Projektantrag Allgemein, Organisation (>25<100)"
        ElseIf ThisWorkbook.Sheets("Entscheidungstabelle").Range("V10") = "Ja" Then
          .Rows("146:153").Hidden = False
          .Rows("154:191").Hidden = False
        'Unterschrift "Projektantrag Allgemein, Organisation (>100)"
        ElseIf ThisWorkbook.Sheets("Entscheidungstabelle").Range("V11") = "Ja" Then
          .Rows("146:158").Hidden = False
          .Rows("168:191").Hidden = False
        'Unterschrift "Projektauftrag Allgemein, Software, <100"
        ElseIf ThisWorkbook.Sheets("Entscheidungstabelle").Range("V12") = "Ja" Then
          .Rows("146:167").Hidden = False
          .Rows("173:191").Hidden = False
        'Unterschrift "Projektauftrag Allgemein, Software, >100"
        End If
        Case "Softwareeinführung"
          If ThisWorkbook.Sheets("Entscheidungstabelle").Range("V12") = "Nein" Then
            .Rows("146:172").Hidden = True
          Else
            .Rows("146:172").Hidden = False
          End If
        End Select
    Case Else
      .Rows("141:145").Hidden = False
      .Rows("150:191").Hidden = False
    End Select
  End With
End Sub
Hallo,

vielen Dank für die schnelle Antwort. Code funktioniert zum Teil. Er führt die erste Bedingung "Projektantrag an die Planungsrunde" sauber aus. Dann allerdings erfolgt keine Ausblendung der nachfolgenden Fälle. Excel bringt allerdings auch keine Fehlermeldung. Kann man da noch etwas optimieren?

Gruß
Michael
Hallo Michael,
wenn in O15 Projektantrag an die Planungsrunde steht, wird auch nichts anderes mehr getan.
Was sollte denn Deiner Meinung nach erfolgen? Vielleicht stellst Du mal eine Beispieldatei mit verschiedenen Szenarien vor?
Und

Code:
If Range("O15") <> "Projektantrag an die Planungsrunde" Then Rows("141:145").Hidden = False
If Range("O15") = "Projektantrag an die Planungsrunde" Then Rows("141:145").Hidden = True

Schreibt man in VBA so:

Code:
Rows("141:145").Hidden = Range("O15") = "Projektantrag an die Planungsrunde"