Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VBA: Zellen Sperren wenn Spalte ein Nein enthält
#1
Hallo Liebe VBA-Experten,

ich möchte das in der gesamten Arbeitsmappe die Spalte H grau und gesperrt wird wenn in Spalte G das Wort Nein steht (mittels dropdown und wenn möglich NUR wenn das Wort Nein steht). Dasselbe soll gelten für Spalte J (wenn Nein) dann Spalte K Grau und gesperrt.

Ich habe folgenden Code gefunden jedoch funktioniert er nur für ein Tabellenblatt (sorry VBA Kenntnisse beschränken sich bei aus Copy und Paste Smile )

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If ActiveSheet.Range("B2") = "Nein" Then
   ActiveSheet.Unprotect
   ActiveSheet.Range("C1:C2").Select
     With Selection.Interior
       .Pattern = xlSolid
       .PatternColorIndex = xlAutomatic
       .ThemeColor = xlThemeColorDark1
       .TintAndShade = -0.249946592608417
       .PatternTintAndShade = 0
    End With
    With Selection
       .Locked = True
   End With
   Else
   ActiveSheet.Unprotect
   ActiveSheet.Range("C1:C2").Interior.ColorIndex = xlNone
   ActiveSheet.Range("C1:C2").Locked = False
End If
   ActiveSheet.Protect
End Sub

Kann mir jemand sagen wie ich den Code umschreiben kann, damit er für die gewünschten Spalten und die gesamte Arbeitsmappe gilt?

Vielen Dank schonmal!!!

Viele Grüße
Don
Antworten Top
#2
(22.07.2015, 09:31)dondraper schrieb: Hallo Liebe VBA-Experten,

ich möchte das in der gesamten Arbeitsmappe die Spalte H grau und gesperrt wird wenn in Spalte G das Wort Nein steht (mittels dropdown und wenn möglich NUR wenn das Wort Nein steht). Dasselbe soll gelten für Spalte J (wenn Nein) dann Spalte K Grau und gesperrt.

Ich habe folgenden Code gefunden jedoch funktioniert er nur für ein Tabellenblatt (sorry VBA Kenntnisse beschränken sich bei aus Copy und Paste Smile )

Private Sub Worksheet_Change(ByVal Target As Range)
If ActiveSheet.Range("B2") = "Nein" Then
   ActiveSheet.Unprotect
   ActiveSheet.Range("C1:C2").Select
     With Selection.Interior
       .Pattern = xlSolid
       .PatternColorIndex = xlAutomatic
       .ThemeColor = xlThemeColorDark1
       .TintAndShade = -0.249946592608417
       .PatternTintAndShade = 0
    End With
    With Selection
       .Locked = True
   End With
   Else
   ActiveSheet.Unprotect
   ActiveSheet.Range("C1:C2").Interior.ColorIndex = xlNone
   ActiveSheet.Range("C1:C2").Locked = False
End If
   ActiveSheet.Protect
End Sub

Kann mir jemand sagen wie ich den Code umschreiben kann, damit er für die gewünschten Spalten und die gesamte Arbeitsmappe gilt?

Vielen Dank schonmal!!!

Viele Grüße
Don

Echt keiner???? :(
Antworten Top
#3
Hi Don,

(22.07.2015, 14:39)dondraper schrieb: Echt keiner???? :(

weißt Du, die meisten machen das hier in ihrer Freizeit und die wenigsten sind Rentner, die (tagsüber) ja auch keine Zeit haben. Heute abend wird sich sicher jemand drum kümmern.
Antworten Top
#4
(22.07.2015, 14:39)dondraper schrieb: Kann mir jemand sagen wie ich den Code umschreiben kann, damit er für die gewünschten Spalten und die gesamte Arbeitsmappe gilt?

so, setze folgendes Makro hinter "DieseArbeitsmappe":
Option Explicit

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If ActiveSheet.Range("B2") = "Nein" Then
        ActiveSheet.Unprotect
        ActiveSheet.Range("H:H").Select
        With Selection.Interior
            .Pattern = xlSolid
            .PatternColorIndex = xlAutomatic
            .ThemeColor = xlThemeColorDark1
            .TintAndShade = -0.249946592608417
            .PatternTintAndShade = 0
        End With
        With Selection
            .Locked = True
        End With
    Else
        ActiveSheet.Unprotect
        ActiveSheet.Range("H:H").Interior.ColorIndex = xlNone
        ActiveSheet.Range("H:H").Locked = False
    End If
    If ActiveSheet.Range("J2") = "Nein" Then
        ActiveSheet.Unprotect
        ActiveSheet.Range("K:K").Select
        With Selection.Interior
            .Pattern = xlSolid
            .PatternColorIndex = xlAutomatic
            .ThemeColor = xlThemeColorDark1
            .TintAndShade = -0.249946592608417
            .PatternTintAndShade = 0
        End With
        With Selection
            .Locked = True
        End With
    Else
        ActiveSheet.Unprotect
        ActiveSheet.Range("K:K").Interior.ColorIndex = xlNone
        ActiveSheet.Range("K:K").Locked = False
    End If
    ActiveSheet.Protect

End Sub


VBA/HTML - CodeConverter für Office-Foren, AddIn für Excel/Word 2000-2013 - komplett in VBA geschrieben von Lukas Mosimann. Projektbetreuung durch mumpel

Code erstellt und getestet in Office 15


Das geht sicher kürzer!
Antworten Top
#5
Hallo Don,

wenn Du so schnell eine Antwort möchstest, würden wir uns auch über eine schnelle Rückmeldung freuen, ob denn unsere Vorschläge zu Deiner Excel-Aufgabe passen ... Hier wäre mal meine optimierte Variante, Funktion siehe Kommentare.
Übrigens lautete die Aufgabe, dass die Färbung bei EIntrag von Nein in der Spalte daneben erfolgt. Ich habe es auch bei mir auf Zelle 2 in der Spalte belassen.

Microsoft Excel Objekt DieseArbeitsmappe
Option Explicit 

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'Variablendeklarationen
'Integer
Dim iCnt%
'Variant - Array
Dim strSpalt
'Array aus Spaltennummern bilden
strSpalt = Array(7, 10)
'mit dem aktiven Blatt
'--> wuerde auch sh statt ActiveSheet gehen.
With ActiveSheet
 'Blattschutz aufheben
 .Unprotect
 'Schleife ueber definierte Spalten
 For iCnt = 0 To Ubound(strSpalt)
   'Wenn in Zeile 2 in definierter Spalte "Nein" steht, dann
   'Hinweis: exakte Schreibweise beachten
   If .Cells(2, strSpalt(iCnt)) = "Nein" Then
     'mit der Spalte daneben
     With .Columns(strSpalt(iCnt) + 1)
       'Farbe und Schutz setzen
       .Interior.ColorIndex = 15
       .Locked = True
     'Ende mit der Spalte daneben
     End With
   'oder Wenn in Zeile 2 in definierter Spalte kein "Nein" steht, dann
   Else
     'mit der Spalte daneben
     With .Columns(strSpalt(iCnt) + 1)
       'Farbe und Schutz zurueck setzen
       .Interior.ColorIndex = xlNone
       .Locked = False
     'Ende mit der Spalte daneben
     End With
   'Ende Wenn in Zeile 2 in definierter Spalte "Nein" steht, dann
   End If
 'Ende Schleife ueber definierte Spalten
 Next
 'Blattschutz setzen
 .Protect
'Ende mit dem aktiven Blatt
End With
End Sub

.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top


Gehe zu:


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