![]() |
Betrifft: Wenn Inhalt in Zelle dann andere Zelle entsperren
von: Sebastian
Geschrieben am: 14.10.2014 10:37:53
Hallo zusammen!
Ich möchte mit einem Makro den Wert einer Zelle auslesen und bei einem bestimmten Zeichen sollen dann andere Zellen freigeschalten werden, ich hatte es über folgendes Beispiel gelößt:
If Range("F9") Like "*+*" Then Range("B11").Locked = False Else Range("B11").Locked = True
Soweit so gut, ich möchte nun aber, dass bei einem "+" zwei Zellen freigeschalten werden, bei zwei "+" 3 Zellen und bei drei "+" 4 Zellen.
Beispiele des Inhalts von Zelle F9.
1+1-Fach = 2 bestimmte Zellen beschreibbar
1+1+1-Fach = 3 bestimmte Zellen beschreibbar
1+1+1+1-Fach = 4 bestimmte Zellen beschreibbar
Ich möchte also das die "+" gezählt werden und von deren Anzahl ist die Freischaltung abhängig. Bei meinem Code ist es ja egal wie oft das "+" auftaucht .....
Danke für eure Hilfe!
MfG Sebastian
![]() ![]() |
Betrifft: AW: Wenn Inhalt in Zelle dann andere Zelle entsperren
von: Steffi
Geschrieben am: 14.10.2014 11:10:19
Hallo Sebastian,
hast du dir so etwas in dieser Richtung vorgestellt?
Sub Bereiche_entsperren() Dim AnzahlPlus As Long With ThisWorkbook.Sheets(1) 'anpassen AnzahlPlus = Len(.Range("F9")) - Len(Replace(.Range("F9"), "+", "")) If AnzahlPlus <> 0 Then .Range("B:B").Locked = True .Range(.Cells(11, 2), .Cells(11 + AnzahlPlus - 1, 2)).Locked = False Else .Range("B:B").Locked = True End If End With End Sub
![]() ![]() |
Betrifft: AW: Wenn Inhalt in Zelle dann andere Zelle entsperren
von: Sebastian
Geschrieben am: 14.10.2014 11:37:43
Hallo Steffi,
ich habe bei mir die Zeile " With ThisWorkbook.Sheets(1) 'anpassen" entsprechend auf meinem Sheet geändert. Nur leider hat sich nichts getan.
Zu dem hätte ich gerne, dass bei einem "+" die Zellen "B11" und "B13", bei zwei "B11", "B13" und "B15", sowie zuletzt bei 4 "+" noch die Zelle "B17" hinzu.
Gruß Sebastian
![]() ![]() |
Betrifft: AW: Wenn Inhalt in Zelle dann andere Zelle entsperren
von: Steffi
Geschrieben am: 14.10.2014 11:51:18
Leider kann ich dir nicht sagen, warum bei dir nichts passiert. Ich hab das Makro bei mir getestet und es hat so funktioniert wie es soll. Hast du vllt noch ein anderes Makro laufen, was da stören könnte oder hast du vllt den Namen des Workbooks nicht richtig angepasst oder ähnliches?
Dafür dass zwischen den entsperrten Zellen immer eine frei sein soll, hab ich den Code angepasst:
Sub Bereiche_entsperren() Dim AnzahlPlus As Long Dim Zähl As Long With ThisWorkbook.Sheets(1) 'anpassen AnzahlPlus = Len(.Range("F9")) - Len(Replace(.Range("F9"), "+", "")) If AnzahlPlus <> 0 Then .Range("B:B").Locked = True For Zähl = 1 To AnzahlPlus .Cells(11 + (2 * (Zähl - 1)), 2).Locked = False Next Zähl Else .Range("B:B").Locked = True End If End With End Sub
![]() ![]() |
Betrifft: AW: Wenn Inhalt in Zelle dann andere Zelle entsperren
von: Sebastian
Geschrieben am: 14.10.2014 13:58:21
Hallo Steffi,
es funktioniert soweit, nur eines: Es wird immer eine Zelle zu wenig freigegeben.
Jetzt bei einem "+" ist es eine Zelle, bei zwei "+" 2 Zellen usw.
Es sollten sein bei einem "+" 2 Zellen, bei 2 "+" 3 Zellen, bei 3 "+" 4 Zellen
Gruß Sebastian
![]() ![]() |
Betrifft: AW: Wenn Inhalt in Zelle dann andere Zelle entsperren
von: Steffi
Geschrieben am: 14.10.2014 14:03:01
Hallo Sebastian,
dann bin ich ja froh dass es schon mal klappt :)
Für den Rest einfach nur die For-Schleife etwas abändern und zwar so:
For Zähl = 0 To AnzahlPlus .Cells(11 + (2 * Zähl), 2).Locked = False Next Zähl
![]() ![]() |
Betrifft: AW: Wenn Inhalt in Zelle dann andere Zelle entsperren
von: Sebastian
Geschrieben am: 14.10.2014 14:13:00
Super! :)
Vielen Dank
Jetzt funktioniert alles so wie ich es wollte :)
Danke
Gruß Sebastian
![]() ![]() |
Betrifft: AW: Wenn Inhalt in Zelle dann andere Zelle entsperren
von: Sebastian
Geschrieben am: 14.10.2014 14:47:07
Ich habe da mit jetzt etwas herum experimentiert ....
Hier mal mein Code der nicht so funktioniert wie ich es mir erhofft hatte ^^
Dim AnzahlPlus As Long
Dim Zähl As Long
With ThisWorkbook.Sheets("Artikelstammdaten")
AnzahlPlus = Len(.Range("E9")) - Len(Replace(.Range("E9"), "+", ""))
If AnzahlPlus <> 0 Then
.Range("B11:B17").Font.Color = RGB(255, 255, 255)
.Range("C11:C17").Interior.Color = RGB(255, 255, 255)
.Range("C11:C17").Locked = True
For Zähl = 0 To AnzahlPlus
.Cells(11 + (2 * (Zähl)), 2).Font.Color = RGB(0, 0, 0)
.Cells(11 + (2 * (Zähl)), 2).Interior.Color = 49407
.Cells(11 + (2 * (Zähl)), 2).Locked = False
Next Zähl
Else
.Range("B11:B17").Font.Color = RGB(255, 255, 255)
.Range("C11:C17").Interior.Color = RGB(255, 255, 255)
.Range("C11:C17").Locked = True
End If
End With
ActiveSheet.Protect "1234"
End Sub
Ich hätte gerne das es nun auch die oben im Code enthaltenen Funktionen hat.
Desweitern hätte ich gerne eine weitere Funktion eingebaut und zwar sobald in der Zelle "E9" nun "sonstiges" steht soll die gleiche Abfrage mit der Zelle "F9" anstelle von "E9" statt finden.
Gruß Sebastian
![]() ![]() |
Betrifft: AW: Wenn Inhalt in Zelle dann andere Zelle entsperren
von: Sebastian
Geschrieben am: 14.10.2014 17:02:39
Hallo zusammen,
Steffi hat mir bei meinem oben genannten Problem sehr geholfen. Nun habe ich vor den ganzen Code zu erweitern, wodurch er wesentlich umfangreicher wird.
Dies ist mein bisheriger Code auf dem Blatt.
Private Sub Worksheet_Change(ByVal Target As Range) ActiveSheet.Unprotect "Passwort" If Range("E9").Value = "sonstiges" Then Range("F9").Locked = False Else Range("F9").Locked = _ True If Range("E9").Value = "sonstiges" Then Range("F9").Interior.Color = 49407 Else Range("F9"). _ Interior.Color = RGB(255, 255, 255) If Range("E9").Value = "sonstiges" Then Range("F9").Font.Color = RGB(0, 0, 0) Else Range("F9"). _ Font.Color = RGB(255, 255, 255) Dim AnzahlPlus As Long Dim Zähl As Long With ThisWorkbook.Sheets("Artikelstammdaten") AnzahlPlus = Len(.Range("E9") & .Range("F9")) - Len(Replace(.Range("E9") & .Range("F9"), "+" _ , "")) If AnzahlPlus <> 0 Then .Range("B11:B17").Font.Color = RGB(255, 255, 255) For Zähl = 0 To AnzahlPlus .Cells(11 + (2 * (Zähl)), 2).Font.Color = RGB(0, 0, 0) Next Zähl Else .Range("B11:B17").Font.Color = RGB(255, 255, 255) End If End With ActiveSheet.Protect "Passwort" End Sub
![]() |