37 Aufrufe
Gefragt in Tabellenkalkulation von
Hallo

ich möchte gerne in einem Formular wenn ggf. nicht eingetragen werden muss die Zelle grau bzw anders farbig hinterlegen so das jeder auf anhieb sieht das da nichts ausgefüllt werden muss.

Ich habe das mit der "Makro aufzeichnen" - Funktion erstellt und dann das Tabellenblatt gesperrt. Nicht aber die Zellen die betroffen sind.

     With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorAccent5
        .TintAndShade = 0.799981688894314
        .PatternTintAndShade = 0
    End With

Starte ich jetzt das Makro bekomme ich Laufzeitfehler 1004 und diese Zeile ist gelb markiert:

.Pattern = xlSolid

kann mir jemand bitte sagen was ich falsch mache, denn es wäre schon wichtig, dass das Tabelleblatt vor zugriff geschützt ist.

Dank euch!

3 Antworten

0 Punkte
Beantwortet von m-o Profi (18.1k Punkte)

Hallo,

wenn du das Tabellenblatt mit dem Standardeistellungen geschützt hast (gesperrte Zellen auswählen, nicht gesperrte Zellen auswählen), dann hast die Möglichkeit zur Formatierung von Zellen gesperrt. Daher die Fehlermeldung.

Am besten die Zellen, die du einfärben willst vor der Aktivierung des Blattschutzes färben.

Oder du hebst im Makro den Blattschutz auf:

Sub Farbe()

ActiveSheet.Unprotect

 With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorAccent5
        .TintAndShade = 0.799981688894314
        .PatternTintAndShade = 0
    End With

ActiveSheet.Protect

End Sub

Falls du den Blattschutz mit einem Passwort versehen hast, dann ergänze das Passwort (hier im Beispiel 123) so:

ActiveSheet.Unprotect "123"

..

ActiveSheet.Protect "123"

Gruß

M.O.

0 Punkte
Beantwortet von

heißt aber das ich am besten VBA auch ein Passwort setze damit keiner über den Editor das Auslesen kann oder?

Wie sieht es denn aus wenn ich mehrere Tabellenblätter aktiviere

Sheets(Array("FormularDeu", "FormularEng", "FormularBlank")).Select
    Sheets("FormularDeu").Activate
    Range("B11:G12").Select

wie setze ich dann "unprotect" um?


Danke

0 Punkte
Beantwortet von m-o Profi (18.1k Punkte)

Hallo,

wenn du Angst hast, dass jemand das Passwort ausliest, dann schütze das VBA-Project mit einem Passwort. Der Schutz dürfte für die meisten Nutzer ausreichen.

Wenn du mehrere Blätter sperren / entsperren willst, musst du jedes Blatt einzeln ansprechen.

Beispiel 1 (unterschiedliche Bearbeitung der einzelnen Arbeitsblätter):

Sub Schutz1()

Dim arrTabellen As Variant
Dim z As Integer

'Array mit Tabellenblättern definieren
arrTabellen = Array("FormularDeu", "FormularEng", "FormularBlank")

'Blattschutz der einzelnen Tabellenblätter aufheben
For z = LBound(arrTabellen) To UBound(arrTabellen)
 Worksheets(arrTabellen(z)).Unprotect "123"
Next z

'Nun einzelne Tabellenblätter bearbeiten

With Worksheets("FormularDeu").Range("B11:G12").Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorAccent5
        .TintAndShade = 0.799981688894314
        .PatternTintAndShade = 0
End With

With Worksheets("FormularEng")
  .Range("A5") = "Hello"
End With

With Worksheets("FormularBlank")
  .Range("B7") = Date
End With

'Blattschutz der einzelnen Tabellenblätter wieder einrichten
For z = LBound(arrTabellen) To UBound(arrTabellen)
 Worksheets(arrTabellen(z)).Protect "123"
Next z

End Sub

Beispiel 2 (gleiche Bearbeitung aller Arbeitsblätter):

Sub Schutz2()

Dim arrTabellen As Variant
Dim z As Integer

'Array mit Tabellenblättern definieren
arrTabellen = Array("FormularDeu", "FormularEng", "FormularBlank")

'Arbeitsblätter durchlaufen
For z = LBound(arrTabellen) To UBound(arrTabellen)
  With Worksheets(arrTabellen(z))
    'Blattschutz aufheben
    .Unprotect "123"
    'Bereich im Arbeitsblatt einfärben
      With .Range("B11:G12").Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorAccent5
        .TintAndShade = 0.799981688894314
        .PatternTintAndShade = 0
      End With
    'Blattschutz wieder setzen
    .Protect "123"
  End With
Next z

End Sub

Gruß

M.O.

...