Erweiterung/Verzweiung neue Bedingung
#11
Hi,

die Logik dahinter wurde ja schon sehr schön von juvee erklärt.

Hier nochmals der Code mit Kommentaren:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Bereich As Range    'Range, der die Schnittmenge der geänderten Zellen mit A5:A29 enthält
Dim Zelle As Range        'eine Zelle dieses Bereichs
Dim i As Long            'Zählvariable für den Offset der Zeilen (0-11)
Dim k As Long            'Zeilennummer von Zelle
Dim Schützen As Boolean    'Sollen die Zellen geschützt werden (Wahr/Falsch)

Set Bereich = Intersect(Target, Range("A5:A29"))    'Schnittmenge der gänderten Zellen mit A5:A29 festlegen
If Not Bereich Is Nothing Then                    'Falls Schnittmenge nicht leer ist (sie also existiert)
    Me.Unprotect                                    'Blattschutz aufheben
    For Each Zelle In Bereich                        'Schleife über alle Zellen von Bereich
        Schützen = Zelle = "" Or Left(Zelle, 8) Like "Fertig, "    'wenn Zelle leer ist oder mit "Fertig, " beginnt, Dann wird Schützen Wahr, ansonsten Falsch
        k = Zelle.Row                                'Zeilenummer merken
        For i = 0 To 11                            'Schleife über die 12 Offset-Bereiche
            Range(Cells(k + i * 36, "C"), Cells(k + i * 36, "AG")).Locked = Schützen    'Zellschutz in den Zeilen für die Spalten C:AG setzen
        Next i                                        'Ende Schleife über Offset-Bereiche
    Next Zelle                                        'Ende Schelife über alle Zellen von Bereich
    Me.Protect                                        'Blattschutz wieder setzen
End If                                                'Ende "Schnittmenge ist nicht leer"
End Sub

Ich hoffe es ist nun etwas klarer.
Gruß,
Helmut

Win10 - Office365 / MacOS - Office365
[-] Folgende(r) 1 Nutzer sagt Danke an HKindler für diesen Beitrag:
  • RausAndr
Antworten Top
#12
@Helmut:

Erlaube mir eine kleine Anmerkung am Rande:

Für die Zeile:
Code:
Schützen = Zelle = "" Or Left(Zelle, 8) Like "Fertig, "

könnte man auch alternativ schreiben:
Code:
Schützen = (Zelle = "" Or Left(Zelle, 8) = "Fertig, ")
' oder
Schützen = (Zelle = "" Or Zelle Like "Fertig, *")
Like ohne Verwendung von Platzhalten läuft zwar, ist aber unnötig.

Gruß
Ulrich
Antworten Top
#13
@Ulrich

Danke für die Anmerkung.
Code:
Left(Zelle, 8) Like "Fertig, "
habe ich als Abkürzung von
Code:
UCase(Left(Zelle, 8)) = "FERTIG, "
' bzw.
LCASE(Left(Zelle, 8)) = "fertig, "
verwendet, um unabhängig von der Groß-/Kleinschreibung zu sein. Dabei habe allerdings nicht bedacht, dass man sich dann ja auch noch das Left() sparen kann.  33

Deine letzte Zeile ist also das Mittel der Wahl. Thumbsupsmileyanim
Gruß,
Helmut

Win10 - Office365 / MacOS - Office365
Antworten Top


Gehe zu:


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