Hi,
ich habe eine Excel-Datei, in der ich ein Macro geschrieben habe welches:
- Jedes Blatt durchläuft (mit Ausnahmen basierend auf dem Namen)
- Auf jedem Blatt einen bestimmten Bereich aus dem Blattschutz ausnimmt
- Den Blattschutz aktiviert.
Sub Blattschutzaktivieren()
Dim ws As Worksheet
' Schleife durch alle Arbeitsblätter in der Arbeitsmappe
For Each ws In ThisWorkbook.Worksheets
' Überprüfen, ob das Arbeitsblatt übersprungen werden soll
If ws.Name > "Vorlage" And ws.Name > "Übersicht" Then
If ws.ProtectContents Then
' Blattschutz aufheben
ws.Unprotect
End If
ws.Range("B3:AJ182").Locked = False
'Selection.Locked = False
'Selection.FormulaHidden = False
ws.Protect
End If
Next ws
MsgBox "Makro ausgeführt", vbInformation
End Sub
Das funktioniert soweit. Nun möchte ich das Macro erweitert um folgende Funktion:
- Für jede Reihe in der in Zelle AJ ein "x" steht möchte ich die Reihe bzw. Bereich B-AJ in dieser Reihe wieder in den Blattschutz aufnehmen (sprich .locked = True)
Mein Versuch erzeugt leider ein Error 1004
Sub sperren()
Dim ws As Worksheet
Dim lastRow As Long
Dim i As Long
Dim j As Long
' Schleife durch alle Arbeitsblätter in der Arbeitsmappe
For Each ws In ThisWorkbook.Worksheets
' Überprüfen, ob das Arbeitsblatt übersprungen werden soll
If ws.Name > "Vorlage" And ws.Name > "Übersicht" Then
If ws.ProtectContents Then
' Blattschutz aufheben
ws.Unprotect
End If
ws.Range("B3:AJ182").Locked = False
lastRow = ws.Cells(ws.Rows.Count, "AJ").End(xlUp).Row ' Find the last row in column AJ
' Schleife durch jede Zeile
For i = 3 To lastRow ' Assuming data starts from row 3 and not row 1
' Überprüfen, ob in Zelle AJ ein "x" steht
If ws.Cells(i, 36).Value = "x" Then
' In dieser Zeile "x" gefunden, Zellen in Spalte B bis AJ ausschließen
For j = 2 To 36 ' Columns B to AJ are columns 2 to 36
ws.Cells(i, j).Locked = True
Next j
End If
Next i
ws.Protect
End If
Next ws
MsgBox "Makro ausgeführt", vbInformation
End Sub
Kann mir damit jemand helfen?
https://www.herber.de/bbs/user/159770.xlsm