Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1420to1424
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA: Laufzeitfehler 1004 bei "normaler" Sperrung

VBA: Laufzeitfehler 1004 bei "normaler" Sperrung
15.04.2015 12:26:39
Hauser
Halli Hallo,
ich habe mit Excel 2010 ein Antragsformular erstellt, welches sich durch VBA an die Eingaben der Antragsteller anpasst
(je nachdem was gewählt/eingegeben wird werden Tabellenblätter ein- bzw. ausgeblendet usw.).
Diese Arbeitsmappen möchte ich nun für die Antragsteller sperren, damit diese keine Änderungen vornehmen können. Ich habe also die betroffenen Zellen über Zellen formatieren - Schutz - Gesperrt zur Bearbeitung gesperrt, andere zur Bearbeitung freigegeben.
Wenn ich nun die Arbeitsmappe schützen möchte (über Überprüfen - Arbeitsmappe schützen), erhalte ich reihenweise Fehlermeldungen ("Laufzeitfehler 1004").
Ich habe eine Private Sub Worksheet_SelectionChange(ByVal Target As Range) die Excel mir dann förmlich zerschießt.
Gibt es eine Möglichkeit die Arbeitsmappe zu schützen ohne den Fehler zu erhalten?
Das Formular wird von Leuten genutzt die sich nicht sonderlich gut mit VBA oder Excel auskennen. Daher möchte ich Fehlermeldungen bei der Benutzung gerne vermeiden.

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: Laufzeitfehler 1004 bei "normaler" Sperrung
15.04.2015 12:33:51
selli
hallo hauser,
in der 6. zeile deines codes ist eine fehlerhafte variablendeklarierung.
gruß
selli

AW: VBA: Laufzeitfehler 1004 bei "normaler" Sperrung
15.04.2015 12:38:42
Hauser
Hallo selli,
vielen lieben Dank für die schnelle Antwort.
Leider verstehe ich nicht genau was du meinst. Meine VBA-Künste sind leider eher bescheiden.

AW: VBA: Laufzeitfehler 1004 bei "normaler" Sperrung
15.04.2015 12:42:16
Oberschlumpf
Hi #Name?!
Wenn der Blattschutz aktiv ist, was eine gute idee ist, wenn es um das ungewollte Ändern von Zellinhalten geht, dann gilt dieser Schutz auch für jeden VBA-Code.
Du musst also, wenn bei Bedarf Zellinhalte durch VBA-Code verändert werden soll, entweder...
...genau diese Zellen NICHT schützen (sie können dann durch den Code UND auch durch den Anwender verändert werden)
...oder in jedem VBA-Code, der Zellwerte ändern soll...
- erst den Blattschutz mit VBA-Code entfernen
- die Zellwerte durch VBA-Code ändern
- den Blattschutz durch VBA-Code wieder aktivieren
Am Bsp vom SelectionChange-Ereignis kann das so aussehen:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Sheets(?).UnProtect
'DeinCode
Sheets(?).Protect
End Sub

a) für ? musst du entweder den BlattIndex ODER Blattname für die Tabelle eintragen, in der per Code Werte geändert werden sollen.
b) wenn du für den Blattschutz ein Passwort verwendest, dann schau dir mit F1 die Hilfe zu Protect/UnProtect an
Konnte ich dir helfen?
Ciao
Thorsten
...wenn ich (noch) nicht helfen konnte, zeig uns per Upload bitte eine Bsp-Datei mit Bsp-Daten, in der dein beschriebenes Problem erkennbar ist...

Anzeige
AW: VBA: Laufzeitfehler 1004 bei "normaler" Sperrung
15.04.2015 13:12:04
Hauser
Hat wunderbar geklappt, vielen Dank.
Ich habe es jetzt so gelöst (hier ändert sich das Arbeitsblatt wenn ein Optionsfeld ausgewählt (TRUE) wird:
Private Sub Optionsfeld_Click()
Optionsfeld.Value = True Then
Sheets("Tabellenblatt").Unprotect
ActiveSheet.Range("E13:E16") = 0
Sheets("Tabellenblatt").Protect
End If
End Sub
Kann ich noch eine Passwortabfrage erstellen, die den Schutz dann aufhebt (für die Leute die es bearbeiten wollen?)

AW: VBA: Laufzeitfehler 1004 bei "normaler" Sperrung
15.04.2015 13:16:03
Hauser
Dort gehört natürlich ein If hin:
Private Sub Optionsfeld_Click()
If Optionsfeld.Value = True Then
Sheets("Tabellenblatt").Unprotect
ActiveSheet.Range("E13:E16") = 0
Sheets("Tabellenblatt").Protect
End If
End Sub
Vielen Dank nochmal.
Gruß
Hauser

Anzeige
AW: VBA: Laufzeitfehler 1004 bei "normaler" Sperrung
15.04.2015 13:20:43
Oberschlumpf
da dein Code ohne Passwort für den Blattschutz arbeitet, würde das hier reichen:
- in der Menüzeile von Excel das Menü "Überprüfen" auswählen
- auf die Schaltfläche "Blattschutz aufheben" klicken
- die gewünschten Änderungen per Hand vornehmen
- im Menü "Überprüfen" auf die Schaltfläche "Blatt schützen" klicken, auf "OK" klicken
Hilfts?

AW: VBA: Laufzeitfehler 1004 bei "normaler" Sperrung
15.04.2015 13:27:50
Hauser
Man kann durch diese Lösung tatsächlich Änderungen vornehmen, sofern man sich bereits in der Zelle befindet, die man ändern möchte.
Durch Worksheet_SheetChange und Worksheet_SelectionChange springt die Sperre wieder rein sobald man die Selektion ändert oder einen Zellinhalt ändert.
Das ist ganz gut wenn ich kurzfristige Änderungen vornehmen möchte. Ich befürchte nur, dass man diese Lücke ausnutzen könnte, solange es kein Passwort gibt.

Anzeige
AW: VBA: Laufzeitfehler 1004 bei "normaler" Sperrung
15.04.2015 13:41:16
Oberschlumpf
ja, da haste recht...denn über das Menü "Überprüfen" kann JEDER den Blattschutz aktivieren/deaktivieren, wenn für den Blattschutz kein Passwort gesetzt ist.
Und noch fieser ist: Wenn jemand anderes als du den Blattschutz MIT Passwort aktiviert, hast DU erst mal keine Chance mehr, den Blattschutz zu DEaktivieren, da du ja das Passwort nicht kennst...hehe
Deswegen würde ich dir empfehlen, aktiviere DU den Blattschutz MIT Passwort.
Und genau dieses Passwort kann dann für die Idee/Frage von dir eingesetzt werden, die lautet:
Kann ich noch eine Passwortabfrage erstellen, die den Schutz dann aufhebt (für die Leute die es bearbeiten wollen?)
Dafür aber brauchen wir von DIR per Upload eine Bsp-Datei mit Bsp-Daten!

Anzeige
AW: VBA: Laufzeitfehler 1004 bei "normaler" Sperrung
16.04.2015 14:01:31
Hauser
Hallo allerseits,
hier eine Beispiel-Datei die (sehr vereinfacht) wiedergibt, welches Problem ich habe.

Die Datei https://www.herber.de/bbs/user/97112.xlsm wurde aus Datenschutzgründen gelöscht


Durch Worksheet_SheetChange und Worksheet_SelectionChange springt der Blattschutz rein sobald man die Selektion oder einen Zellinhalt ändert. Der spätere Anwender soll halt nur Zugriff auf bestimmte Eingabefelder haben (dort wo jetzt "Grün" steht).
Da die Optionsbuttons etwas im gesperrten Bereich verändern (die Farbe), wird der Blattschutz kurzzeitig aufgehoben und die Farbe wird geändert.
Private Sub OptionBlau_Click()
If OptionBlau.Value = True Then
Sheets("Tabellenblatt").Unprotect
ActiveWorkbook.Sheets("Tabellenblatt").Range("B9:C13").Interior.Color = RGB(51, 51, 255)
Sheets("Tabellenblatt").Protect
End If
End Sub
Der Schutz lässt sich aber jederzeit aufheben. Ich habe versucht über .Protect "Passwort" einen Passwortschutz einzurichten. Das hatte aber totales Chaos zu Folge. Bei jeder Selektionsänderung werde ich nach dem Passwort gefragt.

Anzeige
AW: VBA: Laufzeitfehler 1004 bei "normaler" Sperrung
16.04.2015 15:32:10
Oberschlumpf
Hi, is dein Name wirklich Hause?!
hier, versuch mal:
https://www.herber.de/bbs/user/97117.xlsm
Schau dir den Code an.
An allen Stellen, wo Blattschutz gesetzt/entfernt wird, ist am Ende der jeweiligen Befehlszeile "passwort" angehängt.
Das musst du also noch anpassen, es sei denn, du willst, dass das Passwort = "passwort" heißen soll.
die Protect-Zeilen in Select + Change hab ich erst mal deaktiviert, weil zumindest ich den Sinn noch nicht verstehe.
Und deine Frage, ob man mit ner Passwortabfrage an der richtigen Stelle was machen kann, hab ich noch nicht eingebaut, weil ich erst mal wissen will, ob es so mit blau + rot ok für dich ist?
Außerdem:
Wenn Passwortabfrage möglich, dann muss ja all den Leuten das Passwort für den Blattschutz bekannt sein. Die könnten dann natürlich auch wieder ALLES ändern...is das von dir bedacht?
Hilfts denn erst mal?
Ciao
Thorsten

Anzeige
AW: VBA: Laufzeitfehler 1004 bei "normaler" Sperrung
16.04.2015 17:01:16
Hauser
Meinen wirklichen Namen möchte ich mal außen vor lassen, "Hauser" muss reichen. Ich bin halt ein "Hauser".
Die Leute die das Formular nutzen um es auszufüllen und auszudrucken brauchen das Passwort ja nicht. Die sollen ja auch nix an der Datei ändern können. Für die reicht es, wenn sie die nicht-gesperrten Zellen ausfüllen und dann drucken.
Die Leute die die Excel-Datei hinterher noch bearbeiten können sollen kriegen natürlich das Passwort.
Die Protect-Zeilen in Select + Change hatten einen anderen Hintergrund, der in der Beispieldatei leider nicht ersichtlich war. Und zwar gab es einen Befehl, der immer bei Select + Change durchgeführt wurde und die Tabelle änderte. Darum wurde bei Select + Change auch jedes mal der Schutz aufgehoben.
Ich habs aber jetzt gelöst. Jetzt fragt Excel nur nach dem Passwort, wenn man den Schutz aufheben möchte und nicht mehr, wenn man die Zelle wechselt.
Jetzt ist alles gut, das Formular macht was es soll.
Anzeige

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige