Erweiterung/Verzweiung neue Bedingung
#1
Hallo liebe Forum Teilnehmer!

Leider bin ich im VBA programmieren Anfänger,
Deshalb würde ich mich über eure Hilfe sehr freuen.

Würde folgenden Code erweitern, wenn in der leeren Zelle "A5" aus ersten 9 Zeichen "FERTIG,  " 
stehlt, die Zellen "C5:AG5" auch wieder gesperrt/gesichert sind.

Würde es mit  einer IF Bedingung funktionieren?
IF(MID(RC[-1],1,9)=""FERTIG,  "

leider weiß ich nicht wo und wie ich diese Funktion in den bestehenden Code einbinden soll.

Für eure Hilfe sehr dankbar


Andreas


Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Tabelle2.Unprotect
Range("C5:AG5").Locked = Range("A5") = ""
Tabelle2.Protect
End Sub
Antworten Top
#2
Hallo Andreas,

stelle doch bitte eine Beispieldatei ein, dann kann man Lösungsvorschläge testen.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top
#3
Anbei die Muster Datei!
PW: ist leer!


Angehängte Dateien
.xlsm   Dienstplanung_anonym.xlsm (Größe: 162,33 KB / Downloads: 8)
Antworten Top
#4
Hi,

ich würde auf keinen Fall immer alle Zellen A5:A29 prüfen, sondern nur diejenige Zelle, die sich geändert hat.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Bereich As Range
Dim Zelle As Range
Dim i As Long
Dim k As Long
Dim Schützen As Boolean
Set Bereich = Intersect(Target, Range("A5:A29"))
If Not Bereich Is Nothing Then
    Me.Unprotect
    For Each Zelle In Bereich
        Schützen = Zelle = "" Or Left(Zelle, 8) Like "Fertig, "
        k = Zelle.Row
        For i = 0 To 10
            Range(Cells(k + i * 36, "C"), Cells(k + i * 36, "AG")).Locked = Schützen
        Next i
    Next Zelle
    Me.Protect
End If
End Sub
Gruß,
Helmut

Win10 - Office365 / MacOS - Office365
Antworten Top
#5
Smile 
Hallo Helmut,

herzlichen Dank für deine Hilfe, hab hier wahrscheinlich viel zu viele Ranges() aber da es 12 Monate sind natürlich auch 12 Ranges Smile
ist meinen nicht vorhanden Verständnis des Aufbaues geschuldet.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
'Tabelle2.Unprotect
'Range("C5:AG5,C41:AG41,C77:AG77,C113:AG113,C149:AG149,C185:AG185,C221:AG221,C257:AG257,C293:AG293,C329:AG329,C365:AG365,C401:AG401").Locked = Range("A5") = ""

 Ich füge deinen Code anstatt obigen Code in die Tabelle2(Dienstplan) ein
Wenn ich dann versuche in der Range("K5") ein "E" einzutragen,
sollte es nicht möglich sein da in Range("A5") beim Namen "FERTIG,  "ganz vorne mit drinnen steht.

Bei mir kann aber leider etwas eintragen...

In Range("K12") versuche ich etwas einzutragen, "A12" = leer, Eintrag nicht möglich = hier PASST es!

Vielleicht hab ich es auch nicht richtig rüber gebracht beim ersten Mal...

Vielen Dank schon mal...
Antworten Top
#6
Hi,

du hast es schon richtig erklärt. Nur habe ich wohl nicht klar gemacht, dass du initial einmalig in A5:A29 rein gehen (mit Doppelklick oder F2) und den Inhalt mit Enter bestätigen musst. Zumindest bei den Zeilen, bei denen „Fertig“ steht. Die Routine schaut sich nur die Zeilen an, bei denen in Spalte A etwas geändert wurde und setzt dort den Blattschutz.

Es könnte sein, dass ich mich verzählt habe, aber in meiner Routine sind es nur 11 Zeilen. Eventuell musst du also die 10 in der For-Schleife durch eine 11 ersetzen.
Gruß,
Helmut

Win10 - Office365 / MacOS - Office365
Antworten Top
#7
Smile 
Vielen Dank, sehr cool, genau so soll es sein!

Vielleicht hast du Lust, mir den Code ein wenig mit Kommentaren zu ergänzen, ich würde ja so gern auch verstehen und auch dazulernen was du da/wie programmiert hast.

Speziell

Code:
            Range(Cells(k + i * 36, "C"), Cells(k + i * 36, "AG")).Locked = Schützen

Hier steht dann für mich nur noch ein Chinesischer Text .... Smile



Vielen Dank und lg Andreas
Antworten Top
#8
Hi,

Auch wenn ich zwei Tage nicht antworte, ist das kein Grund eine PN zu schicken. Bin im Urlaub und auf dem Handy tippe ich ungern Code-Zeilen. Also Gedulde dich bitte bis zum Wochende. 21
Gruß,
Helmut

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

sorry, war überhaupt nicht böse gemeint, oder bin ich besonders ungeduldig,
hab mir gedacht dass es erledigt ist, und du vielleicht nicht mehr rein schaust.

Glg Andreas
Antworten Top
#10
Hi,

kleiner Tip:

setze for die Codezeile einen Haltepunkt ( F9 ). Dann kannst du dir anschauen, welche Werte die Variablen k und i haben.
Gehe dann mit F8 schrittweise im Code weiter und schaue das nächste mal wie sich die Variablen verändert haben.

k entspricht der Zeilennummer der Zelle, die verändert wurde im Bereich A5:A29
i läuft von 0 bis 11 in der For..next schleife
Range(cells(...,C),cells(...,AG)).Locked = schützen  kennst du von deinem eigenen Code. Schützen ist ein boolscher Wert, entweder Wahr oder falsch

k+i*36 ergibt bei k=5 und i =0  ==> 5 + 36*0=5
next i
k+i*36 ergibt bei  immer noch 5 und i = 1 ==> 5 * 36*1 = 41
next i
k+i*36 ergibt bei  immer noch 5 und i = 2 ==> 5 * 36*2 = 77


Die Schleife arbeitet sich also durch deine Dienstplanbereiche


VG Juvee
[-] Folgende(r) 1 Nutzer sagt Danke an juvee für diesen Beitrag:
  • RausAndr
Antworten Top


Gehe zu:


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