Microsoft Excel

Herbers Excel/VBA-Archiv

Wenn Inhalt in Zelle dann andere Zelle entsperren

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

Das Ganze zählt die + in F9 und entsperrt dann ab der Zelle B11 die entsprechende Anzahl an Zellen. Wenn kein + da ist wird die ganze Spalte gesperrt. Ich hoffe es hilft dir weiter.

Gruß Steffi


  

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

Gruß Steffi


  

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

Gruß Steffi


  

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

Ich möchte desweitern einbringen, das entsprechend noch: Schriftfarbe, Zellenfarbe und Zellenfreigabe von C11 bis C17 in das “+“-Zählen eingebunden wird. Dann sollte noch eingebunden werden, dass wenn in den Zellen E9 und F9 kein “+“ oder bei den “+“ gespiegelt dabei steht, die oben genannten Auswirkungen nur auf die Zelle B11 und C11 anzuwenden sind.

MfG Sebastian


 

Beiträge aus den Excel-Beispielen zum Thema "Wenn Inhalt in Zelle dann andere Zelle entsperren"