IF-If-Then-Else-Anweisung; wie Bedingungen verknüpfen?

Bild

Betrifft: IF-If-Then-Else-Anweisung; wie Bedingungen verknüpfen?
von: Fritz Müller
Geschrieben am: 14.07.2015 10:07:15

Hallo zusammen,
bin, was Excel betrifft, noch ziemlich in der Kinderschuhen…
möchte folgende Bedingungen verknüpfen, kriege es aber nicht hin:


Private Sub Worksheet_sperren()
Dim Wks As Worksheet
Set Wks = ActiveSheet
If Target.Address = "$C$25" Then
   
    If Target = "CLOSED" Then
        Range("D25:D26:D27:E25:E26:E27").Locked = True
    Else
        Range("D25:D26:D27:E25:E26:E27").Locked = False
    End If
    
    
If Target.Address = "$F$25" Then
   
    If Target = "CLOSED" Then
        Range("G25:G26:G27:H25:H26:H27").Locked = True
    Else
        Range("G25:G26:G27:H25:H26:H27").Locked = False
    End If
usw.
   
End If
End Sub

es liegt am verknüpfen, denn nur mit einer Bedingung läuft's:

Private Sub Worksheet_sperren()
Dim Wks As Worksheet
Set Wks = ActiveSheet
If Target.Address = "$C$25" Then
   
    If Target = "CLOSED" Then
        Range("D25:D26:D27:E25:E26:E27").Locked = True
    Else
        Range("D25:D26:D27:E25:E26:E27").Locked = False
    End If
      
End If
End Sub
Vielen Dank für Eure Hilfe!
MfG, Fritz

Bild

Betrifft: AW: IF-If-Then-Else-Anweisung; wie Bed verknüpfen?
von: Daniel
Geschrieben am: 14.07.2015 10:16:18
Hi
du musst die IFs auch sauber abschließen, oder mit ElseIF arbeiten, wenns mehrere Varianten gibt:
a) sauber abgeschlossene einzelne IF-Blöcke:

Private Sub Worksheet_sperren()
Dim Wks As Worksheet
Set Wks = ActiveSheet
If Target.Address = "$C$25" Then
    If Target = "CLOSED" Then
        Range("D25:D26:D27:E25:E26:E27").Locked = True
    Else
        Range("D25:D26:D27:E25:E26:E27").Locked = False
    End If
End If
    
If Target.Address = "$F$25" Then
    If Target = "CLOSED" Then
        Range("G25:G26:G27:H25:H26:H27").Locked = True
    Else
        Range("G25:G26:G27:H25:H26:H27").Locked = False
    End If
End If
usw.
End Sub
b) mehrere Bedinungen mit ElseIF
Private Sub Worksheet_sperren()
Dim Wks As Worksheet
Set Wks = ActiveSheet
If Target.Address = "$C$25" Then
   
    If Target = "CLOSED" Then
        Range("D25:D26:D27:E25:E26:E27").Locked = True
    Else
        Range("D25:D26:D27:E25:E26:E27").Locked = False
    End If
    
    
ElseIf Target.Address = "$F$25" Then
   
    If Target = "CLOSED" Then
        Range("G25:G26:G27:H25:H26:H27").Locked = True
    Else
        Range("G25:G26:G27:H25:H26:H27").Locked = False
    End If
ElseIF ...
Else
End If
   
End Sub
da sich hier hier die einzelnen Bedingungen gegenseitig ausschließen, ist Variante b) die bessere.
Variante a) ist für den Fall, dass sich die einzelnen Bediungungen nicht gegenseitig ausschließen und dann ggf beide Teile ausgeführt werden müssen.
Gruß Daniel

Bild

Betrifft: AW: noch ein Tip:
von: Daniel
Geschrieben am: 14.07.2015 10:34:52
den Inneren IF-Block kannst du dir sparen, denn der Ausdruck: Target = "CLOSED" erzeugt den notwendigen Wahrheitswert:

If Target.Address = "$C$25" Then
    Range("D25:D26:D27:E25:E26:E27").Locked = (Target = "CLOSED")
    
ElseIf Target.Address = "$F$25" Then
    Range("G25:G26:G27:H25:H26:H27").Locked = (Target = "CLOSED")
ElseIF ...

wenn die Regelmäßigkeit der Zellbezüge gegeben ist, kannst du noch weiter vereinfachen:
Select Case Target.Address
    Case "$C$25", "$F$25", ... hier weitere Adressen eintragen wenn erforderlich
        Target.Offset(0, 1).Resize(3, 2).Locked = (Target = "CLOSED")
    Case Else
End Select
Gruß Daniel

Bild

Betrifft: AW: noch ein Tip:
von: Fritz Müller
Geschrieben am: 14.07.2015 14:15:50
Hallo Daniel,
der zusätzliche Tip ist genial und erleichtert vieles!!! Besten Dank!
noch eine kleine Frage, wie müsste es in diesem Fall aussehen, wenn noch eine zusätzliche Bedingung rein müsste:

Private Sub Worksheet_sperren()
Dim Wks As Worksheet
Set Wks = ActiveSheet
Select Case Target.Address
    Case "$C$25", "$F$25", ... hier weitere Adressen eintragen wenn erforderlich
        Target.Offset(0, 1).Resize(3, 2).Locked = (Target = "CLOSED")
    Case Else
End Select
Select Case Target.Address
    Case "$C$28"
        Target.Offset(-3, 2).Locked = (Target = "No Option 1")
    Case Else
End Select
End Sub


Bild

Betrifft: AW: noch ein Tip:
von: Daniel
Geschrieben am: 14.07.2015 14:23:38
Hi
du kannst bei SelectCase auch mehrere Bediungugen, die sich gegenseitig ausschließen haben, das funktioniert dann ähnlich wie das ElseIF:


Select Case Target.Address
    Case "$C$25", "$F$25", ... hier weitere Adressen eintragen wenn erforderlich
        Target.Offset(0, 1).Resize(3, 2).Locked = (Target = "CLOSED")
    
    Case "$C$28"
        Target.Offset(-3, 2).Locked = (Target = "No Option 1")
    Case Else
End Select

Gruß Daniel

Bild

Betrifft: AW: noch ein Tip:
von: Fritz
Geschrieben am: 15.07.2015 08:18:44
Super! vielen Dank nochmal, Daniel!
Gruss, Fritz

Bild

Betrifft: AW: IF-If-Then-Else-Anweisung; wie Bed verknüpfen?
von: Fritz Müller
Geschrieben am: 14.07.2015 10:41:46
Genial! Besten Dank Daniel!!!
Gruss, Fritz

 Bild

Beiträge aus den Excel-Beispielen zum Thema "IF-If-Then-Else-Anweisung; wie Bedingungen verknüpfen?"