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
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
herzlichen Dank für deine Hilfe, hab hier wahrscheinlich viel zu viele Ranges() aber da es 12 Monate sind natürlich auch 12 Ranges 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...
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.
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 ....
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.
Gruß, Helmut
Win10 - Office365 / MacOS - Office365
Folgende(r) 1 Nutzer sagt Danke an HKindler für diesen Beitrag:1 Nutzer sagt Danke an HKindler für diesen Beitrag 28 • RausAndr
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.
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:1 Nutzer sagt Danke an juvee für diesen Beitrag 28 • RausAndr