Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Die Locked Eigenschaft kann nicht festgelegt werde

Forumthread: Die Locked Eigenschaft kann nicht festgelegt werde

Die Locked Eigenschaft kann nicht festgelegt werde
10.07.2007 09:24:27
Salim

Hallo zusammen,
Franz hat mir geholfen folgendes Codes zur entwickeln.
Sub Speichern()
Dim wks As Worksheet, wbThis As Workbook, wbSave As Workbook
Dim rng As Range
Set wbThis = ThisWorkbook
With wbThis.Worksheets("Tabelle1")
strDateiname = ThisWorkbook.Path & "\" & .Range(" J4") & "_" & .Range("R8") & "_" & _
.Range("R6") & "_" & "Backup" & "_" & Format(Date, "YYYYMMDD") & ".xls"
End With
wbThis.SaveCopyAs strDateiname
Set wbSave = Workbooks.Open(FileName:=strDateiname)
wbSave.Unprotect
For Each wks In wbSave.Worksheets
wks.Unprotect
For Each rng In wks.UsedRange.Cells
If Not IsEmpty(rng) Then rng.Locked = True
Next rng
wks.Protect
Next wks
wbSave.Protect
wbSave.Close savechanges:=True
End Sub


Es funktioniert.
Ich habe es etwas abgeändert, um den Code in meiner Arbeitsmappe einzufügen.
Jetzt kommt die Fehlermeldung: Die Locked Eigenschaft des Range-Objektes kann nicht festgelegt werden. Beim Debuggen wird die Zeile: rng.Locked = True gelb markiert.


Private Sub CommandButton1_Click()
Me.Hide
Dim wks As Worksheet, wbThis As Workbook, wbSave As Workbook
Dim rng As Range
Set wbThis = ThisWorkbook
With wbThis.Worksheets("Abrechnungsblatt")
strDateiname = ThisWorkbook.Path & "\" & .Range(" J4") & "_" & .Range("R8") & "_" & _
.Range("R6") & "_" & "Backup" & "_" & Format(Date, "YYYYMMDD") & ".xls"
End With
wbThis.SaveCopyAs strDateiname
Set wbSave = Workbooks.Open(Filename:=strDateiname)
wbSave.Unprotect
For Each wks In wbSave.Worksheets
wks.Unprotect
For Each rng In wks.UsedRange.Cells
If Not IsEmpty(rng) Then rng.Locked = True
Next rng
wks.Protect
Next wks
wbSave.Protect
wbSave.Close savechanges:=True
End Sub


Kann das jemand nachvollziehen? wäre für einen Feedback dankbar ;)
Danke und Gruss
Salim

Anzeige
AW: Die Locked Eigenschaft kann nicht festgelegt werde
10.07.2007 11:02:27
Wolli
Ich kann's nicht nachvollziehen. 1.) Wenn das Makro stoppt, tippe im Direktbereich (Strg+G) "Debug.Print rng.address", dann siehst Du, welche Zelle das Makro gerade bearbeiten will. 2.) Versuche, diese Zelle händisch zu sperren. Vielleicht kommst Du so auf den Fehler. Gruß, Wolli

AW: Die Locked Eigenschaft kann nicht festgelegt werde
10.07.2007 16:17:00
Salim
Danke für dein Feedback!!!
Gruss
Salim

Anzeige
AW: Die Locked Eigenschaft kann nicht festgelegt werde
10.07.2007 16:35:00
Salim
Hallo,
könntest du mir bitte kurz in Einzelschritte erklären wie das geht? habe mit Direktbereich noch nicht gearbeitet und kommemit der Online Suche nicht weiter....
Danke
Gruss
Salim

AW: Die Locked Eigenschaft kann nicht festgelegt werde
10.07.2007 17:07:00
Wolli
Wenn Du im Codefenster stehst, tippst Du Strg+G (oder Ansicht - Direktfenster). Wenn Du in diesem Fenster z.B. "Debug.print a" eingibst, wird dieser Befehl sofort nach dem drücken von "Enter" ausgeführt: Der Inhalt der Variablen "a" wird im Direktfenster angezeigt. Du kannst quasi jeden Programmbefehl, der für sich alleine stehen kann, dort ausführen, z.B. auch Range("A1:B10").select, dann werden im Tabellenblatt die Zellen markiert. Nur Schleifen und so geht nicht. Ist halt ein Direktbereich.
Wenn das Makro mit Fehler anhält, gehst Du auf "Debuggen". Dann ist die "falsche" Zeile gelb, aber das Programm ist noch nicht beendet. In diesem Zustand kannst Du also die Variableninhalte überprüfen (teilweise reicht es, im Programmcode mit der Maus über die Variable zu fahren) und andere Schweinereien machen, du kannst sogar in Grenzen noch den Programmcode modifizieren.
Um ein Programm in Einzelschritten ablaufen zu lassen, gehst Du in den Programmcode und drückst F8 (oder Debuggen - Einzelschritt). Mit jedem F8 wird der nächste Schritt ausgeführt und Du kannst sofort in der Tabelle nachsehen, was sich getan hat. Mit F9 setzt/löschst Du einen Haltepunkt (braune Markierung). Mit F5 läuft das Programm dann bis zum nächsten Haltepunkt bzw. bis zum Ende durch.
Viel Spaß! Wolli

Anzeige
AW: Die Locked Eigenschaft kann nicht festgelegt werde
10.07.2007 17:18:47
Salim
Ich werde es gleich ausprobieren! Vielen Dank für die lange Ausführung ;)
Übrigens, ich habe festgestellt, dass das löschen der Inhalte eines bestimmten Blattes dazu führt, dass der Makro fehlerfrei durchläuft!?
Danke
Gruss

AW: Die Locked Eigenschaft kann nicht festgelegt werde
10.07.2007 17:38:00
Wolli
Na, dann wird der Fehler wohl in diesem Blatt liegen :-) Vielleicht ist da noch was geschützt oder ein Passwort gesetzt oder so. Gruß + bis morgen, Wolli

Anzeige
AW: Die Locked Eigenschaft kann nicht festgelegt werde
10.07.2007 17:51:39
Salim
Hallo Wolli,
vielen Dank für die Unterstützung.;))))))))))))))
Über den Direktbereich habe ich herausgefunden welche Zelle betroffen war. Komischerweise war eine einfache Formel drin + mehrere Zellen verbunden. Irgendwie hat es den Lauf gestört.
Jetzt ist es ja so, dass alle Zellen darauf geprüft werden ob ein Inhalt vorhanden ist und dann wird gesperrt oder auch nicht. Wenn ich diesen Makro ausführe, gibt es ein flakerndes Bildschirm und es dauert ein bisschen. Jetzt die Frage: Würde mann den Aufwand reduzieren, wenn mann ein Bereich definieren würde Bsp. a1:x1000 der auf alle Tabellenblätter gesperrt (unabhängig von ursprünglichen Inhalt und Sperrung)? Wie würde so ein Befehl den aussehen? Herzlichen Dank nochmals.
Gruss
Salim

Anzeige
AW: Die Locked Eigenschaft kann nicht festgelegt w
10.07.2007 21:45:00
Wolli
1.) Na klar. Du prüfst und sperrst Zelle für Zelle. Wenn mehrere verbunden sind, kann Excel sie nicht einzeln ändern.
2.) Gegen das Flackern hilft:
am Programmanfang: Application.ScreenUpdation = False
am Programmende: Application.ScreenUpdation = True
3.) Wenn Dir der Inhalt eh egal ist, kannst Du natürlich einfach

For Each wks In wbSave.Worksheets
wks.Unprotect
Range("A1:X1000").Locked = true
wks.Protect
Next wks


oder für alle Zellen im Arbeitsblatt


For Each wks In wbSave.Worksheets
wks.Unprotect
Cells.Locked = true
wks.Protect
Next wks


machen. Gruß, Wolli

Anzeige
Heißt natürlich Application.ScreenUpdating (owT)
11.07.2007 10:12:42
Wolli

AW: Heißt natürlich Application.ScreenUpdating (owT)
11.07.2007 10:23:41
Salim
Guten Morgen Wolli,
irgenwie packe ich es nicht ;((((
Folgendes Code funktioniert:

Private Sub CommandButton1_Click()
Me.Hide
Inp = InputBox("Geben Sie das Passwort ein", "")
If Inp  "" Then
MsgBox "Falsches Passswort"
Exit Sub
End If
Dim wks As Worksheet, wbThis As Workbook, wbSave As Workbook
Dim rng As Range
Set wbThis = ThisWorkbook
With wbThis.Worksheets("Abrechnungsblatt")
strDateiname = ThisWorkbook.Path & "\" & .Range(" J4") & "_" & .Range("R8") & "_" & _
.Range("R6") & "_" & "Backup" & "_" & Format(Date, "YYYYMMDD") & ".xls"
End With
Application.ScreenUpdating = False
starttime = Time
wbThis.SaveCopyAs strDateiname
Set wbSave = Workbooks.Open(Filename:=strDateiname)
wbSave.Unprotect
For Each wks In wbSave.Worksheets
wks.Unprotect
For Each rng In wks.UsedRange.Cells
If Not IsEmpty(rng) Then rng.Locked = True
Next rng
wks.Protect
Next wks
wbSave.Protect
wbSave.Close savechanges:=True
stoptime = Time
elapsedtime = (stoptime - starttime) * 24 * 60 * 60
Application.ScreenUpdating = True
MsgBox "Ablaufzeit: " & Format(elapsedtime, "0") & " sec."
End Sub


Ich habe versucht deine Vorschläge im Code einzubauen:
1/ Cells.Locked = True : Fehlermeldung: Locked Eigenschaft konnte nicht festgelegt werden. Über debug.print cell.adress kamm keine Rückmeldung.
2/ Der Versuch: Die Zellen zu selektieren, kopieren und mit Werte ersetzten funktioniert auch nicht: Fehlermeldung: Zellen schreibgeschützt, obwohl wks.unprotect am Anfang steht?
Kannst du mich bitte nochmal unterstützen? vielen Dank ;)
So habe ich es versucht....


Private Sub CommandButton1_Click()
Me.Hide
Inp = InputBox("Geben Sie das Passwort ein", "")
If Inp  "" Then
MsgBox "Falsches Passswort"
Exit Sub
End If
Dim wks As Worksheet, wbThis As Workbook, wbSave As Workbook
Dim rng As Range
Set wbThis = ThisWorkbook
With wbThis.Worksheets("Abrechnungsblatt")
strDateiname = ThisWorkbook.Path & "\" & .Range(" J4") & "_" & .Range("R8") & "_" & _
.Range("R6") & "_" & "Backup" & "_" & Format(Date, "YYYYMMDD") & ".xls"
End With
Application.ScreenUpdating = False
starttime = Time
wbThis.SaveCopyAs strDateiname
Set wbSave = Workbooks.Open(Filename:=strDateiname)
wbSave.Unprotect
For Each wks In wbSave.Worksheets
wks.Unprotect
      Cells.select
Selection.copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Cells.locked = True
wks.Protect
Next wks
wbSave.Protect
wbSave.Close savechanges:=True
stoptime = Time
elapsedtime = (stoptime - starttime) * 24 * 60 * 60
Application.ScreenUpdating = True
MsgBox "Ablaufzeit: " & Format(elapsedtime, "0") & " sec."
End Sub


Anzeige
AW: Heißt natürlich Application.ScreenUpdating (owT)
11.07.2007 13:15:00
Wolli
So?

Private Sub CommandButton1_Click()
Me.Hide
Inp = InputBox("Geben Sie das Passwort ein", "")
If Inp  "" Then
MsgBox "Falsches Passswort"
Exit Sub
End If
Dim wks As Worksheet, wbThis As Workbook, wbSave As Workbook
Dim rng As Range
Set wbThis = ThisWorkbook
With wbThis.Worksheets("Abrechnungsblatt")
strDateiname = ThisWorkbook.Path & "\" & .Range(" J4") & "_" & .Range("R8") & "_" & _
.Range("R6") & "_" & "Backup" & "_" & Format(Date, "YYYYMMDD") & ".xls"
End With
Application.ScreenUpdating = False
starttime = Time
wbThis.SaveCopyAs strDateiname
Set wbSave = Workbooks.Open(Filename:=strDateiname)
wbSave.Unprotect
For Each wks In wbSave.Worksheets
wks.Unprotect
wks.Cells.Copy
wks.Cells.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
wks.Cells.Locked = True
wks.Protect
Next wks
wbSave.Protect
wbSave.Close savechanges:=True
stoptime = Time
elapsedtime = (stoptime - starttime) * 24 * 60 * 60
Application.ScreenUpdating = True
MsgBox "Ablaufzeit: " & Format(elapsedtime, "0") & " sec."
End Sub


Anzeige
AW: Heißt natürlich Application.ScreenUpdating (owT)
11.07.2007 13:41:39
Salim
Hallo Wolli,
funktioniert super! habe nicht gewusst, dass man die Zellen jedesmal dem wks zuordnen muss. Der Makro läuft viel schneller durch (6 sec. statt 25 sec.). Vielen Dank dafür.
Eine komische Sache habe ich noch:
Wenn ich folgendes Makro aktiviere:

Private Sub Workbook_open()
Application.ScreenUpdating = False
Worksheets("RSPLAN").ScrollArea = "A1:P552"
Worksheets("RSIST").ScrollArea = "A1:R552"
Worksheets("ZEIST").ScrollArea = "A1:N552"
Worksheets("Eingabeblätter").ScrollArea = "A1:B2"
ActiveWindow.DisplayHeadings = False
Application.CommandBars(1).Controls("Datei").Controls(5).Enabled = True
Application.ScreenUpdating = True
End Sub


Dann flackert der Bildschirm bei der Auslösung des Makros was du mir gerade zugeschickt hast?
Was bewirkt eigentlich Screen.updating = True?
Gruss
Salim

Anzeige
AW: Heißt natürlich Application.ScreenUpdating (owT)
12.07.2007 09:30:00
Wolli
Schau mal in Dein Englisch-Wörterbuch! Scr.upd = false heißt, dass der Bildschirminhalt "eingefroren" wird, solange das Makro läuft. Durch true wird er am Ende wieder freigegeben. Verhindert Flackern und Irritation des Anwenders. Gruß, Wolli

AW: Heißt natürlich Application.ScreenUpdating (owT)
12.07.2007 11:40:31
Salim
Danke!!!
Gruss
Salim
Anzeige
Anzeige

Infobox / Tutorial

Die Locked Eigenschaft des Range Objekts in Excel VBA verstehen


Schritt-für-Schritt-Anleitung

Um die locked Eigenschaft des Range Objekts in Excel VBA richtig zu verwenden, kannst Du die folgenden Schritte befolgen:

  1. Öffne das VBA-Editor-Fenster:

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul hinzu:

    • Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xls)" und wähle Einfügen > Modul.
  3. Schreibe den folgenden Code:

    Sub LockCells()
       Dim wks As Worksheet
       Dim rng As Range
    
       Set wks = ThisWorkbook.Worksheets("Tabelle1")
       wks.Unprotect
    
       For Each rng In wks.UsedRange
           If Not IsEmpty(rng) Then
               rng.Locked = True
           End If
       Next rng
    
       wks.Protect
    End Sub
    • Dieser Code sperrt alle Zellen in "Tabelle1", die nicht leer sind.
  4. Führe den Code aus:

    • Gehe zurück zu Excel und drücke ALT + F8, wähle LockCells und klicke auf Ausführen.

Häufige Fehler und Lösungen

  • Fehler: "Die Locked Eigenschaft des Range Objekts kann nicht festgelegt werden":

    • Dies kann auftreten, wenn die Zelle mit einer Formel oder mit verbundenen Zellen arbeitet. Stelle sicher, dass die Zelle nicht geschützt oder leer ist.
  • Fehler: Excel maus markiert falsche Zelle:

    • Überprüfe, ob Du die richtige Zelle oder den richtigen Bereich im Code angegeben hast. Nutze Debug.Print rng.Address, um die aktuelle Zelle im Direktbereich anzuzeigen.

Alternative Methoden

  • Direktes Sperren eines Bereichs: Du kannst auch direkt einen Bereich sperren, anstatt jede Zelle einzeln zu prüfen. Hier ist ein Beispiel:

    Sub LockRange()
      Dim wks As Worksheet
      Set wks = ThisWorkbook.Worksheets("Tabelle1")
      wks.Unprotect
      wks.Range("A1:X1000").Locked = True
      wks.Protect
    End Sub
  • Verwenden von Application.ScreenUpdating: Um Flackern beim Ausführen des Codes zu vermeiden, kannst Du Application.ScreenUpdating = False am Anfang des Makros setzen und am Ende wieder auf True.


Praktische Beispiele

  1. Sperren aller Zellen in einem Arbeitsblatt:

    Sub LockAllCells()
       Dim wks As Worksheet
       Set wks = ThisWorkbook.Worksheets("Tabelle1")
       wks.Unprotect
       wks.Cells.Locked = True
       wks.Protect
    End Sub
  2. Makro zur Überprüfung und Sperrung:

    Sub CheckAndLockCells()
       Dim wks As Worksheet
       Set wks = ThisWorkbook.Worksheets("Tabelle1")
       wks.Unprotect
    
       For Each rng In wks.UsedRange
           If Not IsEmpty(rng) Then
               rng.Locked = True
           End If
       Next rng
    
       wks.Protect
    End Sub

Tipps für Profis

  • Debugging: Nutze den Direktbereich (Strg + G), um Variableninhalte zu überprüfen, während das Makro läuft. Dies hilft, den Grund für Fehlermeldungen wie "Die Locked Eigenschaft kann nicht festgelegt werden" zu finden.

  • Optimierung: Verwende Application.ScreenUpdating = False, um die Ausführungsgeschwindigkeit zu erhöhen und visuelle Störungen zu vermeiden.

  • Code Struktur: Halte Deinen Code modular und gut kommentiert, um die Wartbarkeit zu erhöhen.


FAQ: Häufige Fragen

1. Warum kann ich die Locked-Eigenschaft nicht festlegen? Der Fehler tritt häufig auf, wenn die Zelle geschützt oder leer ist. Überprüfe, ob die Zelle eine Formel enthält oder ob sie verbunden ist.

2. Wie kann ich den Code schneller machen? Verwende die Application.ScreenUpdating-Einstellungen, um das Flackern zu vermeiden und die Ausführungsgeschwindigkeit zu erhöhen.

3. Kann ich die Locked-Eigenschaft für mehrere Arbeitsblätter gleichzeitig festlegen? Ja, Du kannst eine Schleife verwenden, um durch alle Arbeitsblätter zu iterieren und die Locked-Eigenschaft für die gewünschten Zellen festzulegen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige