Gibt es zu diesem Problem ein Makro / Add-in oder
sonstigen hilfreichen Hinweis.
Darüber würde ich mich jedenfalls sehr freuen.
mfg
Reinhard Feser
Gibt es zu diesem Problem ein Makro / Add-in oder
sonstigen hilfreichen Hinweis.
>>
in der Grundeinstellung sind alle Zellen gesperrt, was sich aber erst bei
Aktivierung des Blattschutzes bemerkbar macht.
Entsperre vorab alle Zellen, in die Eingaben gemacht werden dürfen.
Folgendes Makro im Codebereich des Tabellenblattes bewirkt, dass eine
geänderte Zelle nach Verlassen gesperrt wird. Beachte, dass zur Wirksamkeit
der Blattschutz aktiviert werden muss.
Überwacht wird im Makro der Bereich "A1:N100", passe diesen an deine
Gegebenheiten an.
Private Sub Worksheet_Change(ByVal Target As Range)
If Application.Intersect(Target, Range("A1:N100")) Is Nothing Then Exit Sub
Target.Locked = True
End Sub
Hoffe dass dir das weiterhilft.
mit Gruß
Melanie
Xö2000
mit Deinem ausgezeichneten Hinweis kann ich mein Problem
lösen!
Vielen Dank
Reinhard
>-----Originalnachricht-----
>.
>
mit Deinem ausgezeichneten Hinweis kann ich mein Problem
lösen!
danke für das Feedback, freut mich wenn ich helfen konnte.
mit Gruß
Melanie
jetzt muß ich leider nochmal nachfragen, weil ich nicht
durchblicke, wie das private sub in meine bereits
bestehenden Makros eingebaut wird. Wie wird es aufgerufen
bzw. aktiviert?
Du siehst, eine Reihe von fragen, die Du meinem Beginner
Status - hoffentlich mit Geduld zuschreiben möchtest.
Many thanks in advance
Reinhard
>-----Originalnachricht-----
>.
>
wenn ich mich kurz einmischen darf, da mich das Problem auch interessiert:
Meines Erachtens ist das Problem von Reinhard, dass bei eingeschaltetem
Blattschutz der Befehl "target.lock" nicht möglich ist (zumindest ist "Zelle
formatieren" bei mir unter Excel XP bei eingeschaltetem Blattschutz
inaktiv).
Falls ich es richtig verstanden habe, war der Vorschlag bei allen Zellen, in
denen Eingaben möglich sind, vorab den Zellschutzhaken rauszunehmen, dann
das Blatt zu schützen und nach jeder Eingabe soll das Makro die geänderte
Zelle schützen, indem der Haken bei Zellschutz gesetzt wird.
Bin sehr gespannt, wie dies geht.
Gruß
Joachim
"Reinhard Feser" <r.f...@t-online.de> schrieb im Newsbeitrag
news:108e201c21c8e$04c3f4c0$a4e62ecf@tkmsftngxa06...
>jetzt muß ich leider nochmal nachfragen, weil ich nicht
>durchblicke, wie das private sub in meine bereits
>bestehenden Makros eingebaut wird. Wie wird es aufgerufen
>bzw. aktiviert?
>>
siehe:
>>Folgendes Makro im Codebereich des Tabellenblattes bewirkt, dass eine
>>geänderte Zelle nach Verlassen gesperrt wird.
es wird automatisch aufgerufen, sobald in dem angegebenen Bereich des
betreffenden Tabellenblattes eine Veränderung eintritt.
Es wird direkt im Codebereich des Tabellenblatt geschrieben, weil es eine
Ereignis-Prozedur ist.
Deine anderen Makros laufen unabhängig von dieser Ereignisprozedur, können
aber auch durch diese aufgerufen werden "Call HierDeinMakro".
>Du siehst, eine Reihe von fragen, die Du meinem Beginner
>Status - hoffentlich mit Geduld zuschreiben möchtest.
jeder hat mal angefangen und auch ich lerne täglich jede menge Neues dazu
;-))
mit Gruß
Melanie
"Joachim Schmitt" <jschm...@hotmail.com> schrieb im Newsbeitrag
news:uVzAFEJHCHA.2448@tkmsftngp11...
> Hallo Melanie, hallo Reinhard,
>
> wenn ich mich kurz einmischen darf, da mich das Problem auch interessiert:
> Meines Erachtens ist das Problem von Reinhard, dass bei eingeschaltetem
> Blattschutz der Befehl "target.lock" nicht möglich ist (zumindest ist
"Zelle
> formatieren" bei mir unter Excel XP bei eingeschaltetem Blattschutz
> inaktiv).
>
> Falls ich es richtig verstanden habe, war der Vorschlag bei allen Zellen,
in
> denen Eingaben möglich sind, vorab den Zellschutzhaken rauszunehmen, dann
> das Blatt zu schützen und nach jeder Eingabe soll das Makro die geänderte
> Zelle schützen, indem der Haken bei Zellschutz gesetzt wird.
du hast recht, hier muss vorab der Blattschutz aufgehoben werden und
anschließend wieder gesetzt werden:
Private Sub Worksheet_Change(ByVal Target As Range)
If Application.Intersect(Target, Range("A1:N100")) Is Nothing Then Exit Sub
ActiveSheet.Unprotect
Target.Locked = True
ActiveSheet.Protect
End Sub
mit Gruß und gute Nacht
Melanie
Melanie, ich habe versucht Dein vorgeschlagenes Private
Sub in mein Tabellenblatt einzubauen. Dazu habe ich es im
VBA Projekt unter Microsoft Excel Objekte durch
Doppelklick auf das dort aufgeführte Tabellenblatt und
sich dabei öffnende Fenster eingefügt. Es sieht ganz
vernünftig aus und als Rubrik steht über dem Fenster links
Worksheet, rechts Change. Den Range Bereich habe ich an
mein Tabellenblatt angepaßt, die noch leeren Zellen
entsperrt und das Blatt geschützt. Wenn ich nun in einer
leeren Zelle eine Eingabe mache erhalte ich nach Enter
oder Pfeiltaste den Laufzeitfehler 1004 "Die Locked-
Eigenschaft des Range-Objektes kann nicht festgelegt
werden." Beim Debuggen ist "Target.locked=True" gelb
markiert. Was tun, sprach Zeus.
Hast Du eine Vorstellung, was ich falsch gemacht habe?
Viele Grüße
Reinhard
-Originalnachricht-----
>.
>
ich habe diese Antwort schon mal eine Stufe höher
eingestellt. Hier fehlen mir noch Verhaltensregeln, unter
welchem Eintrag man am besten antwortet.
Melanie, ich habe versucht Dein vorgeschlagenes Private
Sub in mein Tabellenblatt einzubauen. Dazu habe ich es im
VBA Projekt unter Microsoft Excel Objekte durch
Doppelklick auf das dort aufgeführte Tabellenblatt und
sich dabei öffnende Fenster eingefügt. Es sieht ganz
vernünftig aus und als Rubrik steht über dem Fenster links
Worksheet, rechts Change. Den Range Bereich habe ich an
mein Tabellenblatt angepaßt, die noch leeren Zellen
entsperrt und das Blatt geschützt. Wenn ich nun in einer
leeren Zelle eine Eingabe mache erhalte ich nach Enter
oder Pfeiltaste den Laufzeitfehler 1004 "Die Locked-
Eigenschaft des Range-Objektes kann nicht festgelegt
werden." Beim Debuggen ist "Target.locked=True" gelb
markiert. Was tun, sprach Zeus.
Hast Du eine Vorstellung, was ich falsch gemacht habe?
Viele Grüße
>-----Originalnachricht-----
>> >>Private Sub Worksheet_Change(ByVal TargÍ
{ wÀ Q ÌTãiÔ9æiÌ"+ ìè et As Range)
>> >>If Application.Intersect(Target, Range("A1:N100")) Is
>> >Nothing Then Exit Sub
>> >>Target.Locked = True
>> >>End Sub
>> >>
>> >>Hoffe dass dir das weiterhilft.
>> >>
>> >>mit Gruß
>> >>Melanie
>> >>
>> >>Xö2000
>> >>
>> >>
>> >>.
>> >>
>> >
>> >
>> >.
>> >
>>
>>
>
>
>.
>
der Laufzeitfehler hat sich inzwischen erledigt, weil mir
klar wurde , ich mußte "worksheet_Change..."
durch "worksheet_mySheet.." ersetzen. Dann kann man auf
jeden Fall ungestört seine Eingabe machen. Nur leider kann
man anschließend durch (z.B. versehentliches) Betätigen
einer Taste das Geschriebene wieder zerstören. Die Zellen
sind nicht nur nicht gegen wiederholte Eingabe gesperrt,
man kann sie auch nicht sperren bevor man nicht den
Blattschutz aufhebt.
Die Lösung des Problems ist also leider noch offen.
Besteht noch eine Chance, mit euch die Sache weiter zu
betreiben? sollen wir das Thema nochmal als neue Nachricht
einstellen?
Viele Grüße
Reinhard
>-----Originalnachricht-----
>Í{ wÀ È ü- p"ºüo X ìi
>"Reinhard Feser" schrieb:
>der Laufzeitfehler hat sich inzwischen erledigt, weil mir
>klar wurde , ich mußte "worksheet_Change..."
>durch "worksheet_mySheet.." ersetzen. Dann kann man auf
>jeden Fall ungestört seine Eingabe machen. Nur leider kann
>man anschließend durch (z.B. versehentliches) Betätigen
>einer Taste das Geschriebene wieder zerstören. Die Zellen
>sind nicht nur nicht gegen wiederholte Eingabe gesperrt,
>man kann sie auch nicht sperren bevor man nicht den
>Blattschutz aufhebt.
>
ein thread lässt sich leichter lesen, wenn man neuen Text unter den Alten
setzt ;-))
sorry, dass ich jetzt erst Zeit finde, um zu antworten.
"Sperren" funktioniert, indem du einen Doppelklick auf die Zelle machst und
*Nichts* eingibst und <Enter> drückst, aber so ganz verstehe ich dich dei
ganzes Vorhaben nicht mehr.
Die Ereignis-Prozedur "Private Sub Worksheet_Change" wird automatisch bei
jeder Veränderung der Zellen A1:N100 aufgerufen. In welches Modul genau hast
du es gespeichert? Dazu braucht es keine Änderung der Sub-Bezeichnung.
Hier noch mal der derzeitige Code in den Codebereich des Tabellenblattes:
Private Sub Worksheet_Change(ByVal Target As Range)
If Application.Intersect(Target, Range("A1:N100")) Is Nothing Then Exit Sub
ActiveSheet.Unprotect
Target.Locked = True
ActiveSheet.Protect
End Sub
Alternative wäre, du erstellst für dieses Tabellenblatt einen shortcut nur
für die jeweils aktive Zelle:
Blattschutz aufheben
Zelle schützten
Blattschutz setzten
zweiter shortcut:
Blattschutz aufheben
Zelle entschützen
Blattschutz setzten
Machbar wäre evtl. auch den Schutz-Zustand der jeweils aktiven Zelle in der
Statuszeile anzuzeigen, da du durch die shortcuts auch keine Automatisierung
hättest weisst du doch, welche Zelle nun geschützt ist, und welche nicht.
Da dieser Vorschlag doch etwas mehr Zeitaufwand bedeutet, vorab die Frage,
ob du daran Interesse hättest?
>>
>Die Lösung des Problems ist also leider noch offen.
>Besteht noch eine Chance, mit euch die Sache weiter zu
>betreiben? sollen wir das Thema nochmal als neue Nachricht
>einstellen?
Ich denke, wir bleiben in diesem thread, so kann jeder mitverfolgen was
bisher geschrieben wurde und wenn möglich noch Vorschläge machen.
mit Gruß
Melanie
also mit Melanie's letztem Vorschlag funktioniert es jetzt
doch. Durch den Laufzeitfehler war ich auf den Trugschluß
gekommen, das _Change durch den aktuellen Sheetname zu
ersetzen. Das funktionierte natürlich nicht, es wurde aber
auch kein Fehler angezeigt. Nach Stöbern in der VBA Hilfe
leuchtete mir ein, daß es eben doch _Change heißen muß -
und nun "funzte" es. Warum jetzt nicht mehr der
Laufzeitfehler auftrat (worüber ich froh bin), weiß ich
nicht. Hauptsache es funktioniert jetzt. Melanie, Dein
Tipp ist ein Volltreffer ich danke Dir sehr herzlich für
Deine Unterstützung und sehr freundliche Hilfe. Wäre
schön, Dich wieder mal zu "treffen".
Viele Grüße
>>wÍ{ wÀ " ¼®|Ä9×g$ôerden und
also mit Melanie's letztem Vorschlag funktioniert es jetzt
doch. Durch den Laufzeitfehler war ich auf den Trugschluß
gekommen, das _Change durch den aktuellen Sheetname zu
ersetzen. Das funktionierte natürlich nicht, es wurde aber
auch kein Fehler angezeigt. Nach Stöbern in der VBA Hilfe
leuchtete mir ein, daß es eben doch _Change heißen muß -
und nun "funzte" es. Warum jetzt nicht mehr der
Laufzeitfehler auftrat (worüber ich froh bin), weiß ich
nicht. Hauptsache es funktioniert jetzt. Melanie, Dein
Tipp ist ein Volltreffer ich danke Dir sehr herzlich für
Deine Unterstützung und sehr freundliche Hilfe. Wäre
schön, Dich wieder mal zu "treffen".
>>
freut mich wenn's nun doch geklappt hat, obwohl die Sache mit den shortcuts
auch interessant wäre ;-)
mit Gruß
Melanie