Re: Warum klappt das nicht?
09.10.2002 16:59:29
Martin Beck
Hallo Jörg,sehe gerade, daß heute schon eine rege Diskussion zu meinem kleinen Makro stattfand.
Zunächst mal zur bisherigen Funktionsweise des Makros. Du hattest seinerzeit geschrieben, daß Blatt sei geschützt. Da trotzdem die Hintergrundfarbe der aktiven Zelle verändert werden soll, muß der Blattschutz (mit oder ohne Paßwort) augehoben werden, zumindest temporär. Dies erledigt die Zeile
ActiveSheet.Unprotect "test"
oder ohne Paßwort
ActiveSheet.Unprotect
Ich bin nun davon ausgegangen, daß der Blattschutz nach Ablauf des Makros wieder gesetzt werden soll und habe daher die Zeile
ActiveSheet.Protect "test"
am Ende des Codes eingefügt.
Die jetztige Diskussion verstehe ich so, daß es vorkommt, daß der Blattschutz von Dir manuell aufgehoben wird. Wenn Du jetzt die Zellauswahl änderst, wird die Ereignisprozedur ausgelöst. Der Unprotect-Befehl ist wirkungslos, da das Blatt ja nicht geschützt ist, aber der Protect-Befehl wirkt immer. M.a.W. Nach einer Veränderung der Zellauswahl hast Du immer ein geschütztes Blatt!
Ich gehe jetzt mal davon aus, daß das Blatt nach dem Abarbeiten der Ereignisprozedur
1) geschützt sein soll, wenn es vorher geschützt war.
2) nicht geschützt sein soll, wenn es vorher nicht geschützt war.
Verwende hierzu folgenden Code:
Wichtig: Es wird eine beliebige Zelle (hier A1) benötigt, die bei aktivem Blattschutz nicht geändert werden kann, damit im Code festgestellt werden kann, ob das Blatt geschützt ist oder nicht. Statt A1 kannst Du irgendeine Zelle nehmen, die nicht stört, Du mußt den Code dann entsprechend anpassen.
Noch eine Anmerkung zur Public-Variable oldTarget. Es soll ja immer nur die aktive Zelle farbig markiert sein. Das bedeutet, die Markierung in der zuletzt markierten Zelle muß rückgängig gemacht werden. Die Zelle "merkt" sich das Programm in oldTarget. Beim ersten Aufruf des Codes ist oldTarget logischerweise noch nicht belegt. Dann läuft die Zeile
oldTarget.Interior.ColorIndex = xlNone
auf einen Laufzeitfehler 91. Und um dies zu unterdrücken, ist eben
On Error Resume Next
erforderlich.
Alle Klarheiten beseitigt? ;-)
Gruß
Martin Beck