Makros und Blattschutz

Hallo!

Brauche dringend Hilfe!

Ich muss bestimmte Zellbereiche bzw. ganze Tabellen-Blätter (wegen Formeln) schützen.
Wenn ich aber Blattschutz aktiviere, kann mein Makro (eine Sortierfunktion) nicht mehr ausgeführt werden.
Es kommt dann eine Fehlermeldung des Visual Basic „Laufzeitfehler“, mit der Möglichkeit zu „Debuggen“ oder zu „Beenden“.

Was kann ich machen, um das Makro trotz des Blattschutzes ausführen zu können. Beide (Sortier-Makro und Formelschutz) sind sehr wichtig!!

Beim Blattschutz gibt es drei Optionen: Inhalte, Objekte, Szenarien. Auch wenn nur die Option „Inhalte“ aktiviert ist, kann das Makro trotzdem nicht ausgeführt werden.
Und, was bedeutet eigentlich „Debuggen“?

Danke im voraus!

Lena

Hallo Lena, du setzt am Anfang des Makros

ActiveSheet.Unprotect Password:="Dein Passwort"
und am Ende des Makros
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, Password:="Dein Passwort"
wobei das „DrawingObjects:=True, Contents:=True, Scenarios:=True“ sich auf die Einstellungen der Schutzart bezieht, wie sie auch im Menüpunkt „Blatt schützen“ aufgeführt sind. (Ich arbeite mit einer US-Version, deshalb die englischen Ausdrücke).

Grüße, Fritz

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Fritz,

das funktioniert bei mir leider nicht. Habe die fettformatierten Sachen wie beschrieben eingefügt. Beim Makroausführen kommt dann aber folgende Meldung: „Fehler beim Kompilieren, Außerhalb einer Prozedur ungültig“. In dem Code ist dann das Passwort blau markiert.

Mein Makro (Sort2) sieht folgendermaßen aus:
Ganz oben links: Allgemein, oben rechts: Sort2
Makro selbst:

Public Sub Sort2()

’ Sort2 Makro
’ Makro am 15.11.2003 von Lena aufgezeichnet


ActiveWindow.ScrollRow = 187
Range(„B7:G201“).Select
Range(„G201“).Activate
Selection.Sort Key1:=Range(„G8“), Order1:=xlAscending, Key2:=Range(„B8“) _
, Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
False, Orientation:=xlTopToBottom
ActiveWindow.ScrollRow = 8
Range(„A1:F1“).Select
End Sub

Kannst du damit, mit der Fehlermeldung, was anfangen?

Gruß Lena

PS: Kenne mich nicht sonderlich in Makros aus. Habe grade gelernt, wie man ein Makro aufzeichnet und wie der beim Wechseln der Tabellenblätter automatisch ausgeführt werden soll.

Hallo Fritz,

das funktioniert bei mir leider nicht. Habe die
fettformatierten Sachen wie beschrieben eingefügt. Beim
Makroausführen kommt dann aber folgende Meldung: „Fehler beim
Kompilieren, Außerhalb einer Prozedur ungültig“. In dem Code
ist dann das Passwort blau markiert.

Mein Makro (Sort2) sieht folgendermaßen aus:
Ganz oben links: Allgemein, oben rechts: Sort2
Makro selbst:

Public Sub Sort2()

’ Sort2 Makro
’ Makro am 15.11.2003 von Lena aufgezeichnet

ActiveWindow.Unprotect Password:=„passwort“

ActiveWindow.ScrollRow = 187
Range(„B7:G201“).Select
Range(„G201“).Activate
Selection.Sort Key1:=Range(„G8“), Order1:=xlAscending,
Key2:=Range(„B8“) _
, Order2:=xlAscending, Header:=xlGuess,
OrderCustom:=1, MatchCase:= _
False, Orientation:=xlTopToBottom
ActiveWindow.ScrollRow = 8
Range(„A1:F1“).Select

ActiveWindow.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, Password:=„passwort“

End Sub

Kannst du damit, mit der Fehlermeldung, was anfangen?

Gruß Lena

PS: Kenne mich nicht sonderlich in Makros aus. Habe grade
gelernt, wie man ein Makro aufzeichnet und wie der beim
Wechseln der Tabellenblätter automatisch ausgeführt werden
soll.

Hallo Lena,

  1. Hauptverdächtiger:
    Der Befehl zum schützen/öffnen steht außerhalb der Sub
    Siehe oben

  2. Möglichkeit:
    Passwort richtig geschrieben? Passwort in Anführungszeichen gesetzt? Beim Schützen und beim Öffnen?

zeichne mal mit dem Makro-rekorder den Vorgang des Blattschützens selbst auf. Es liegt möglicherweise an der Länderversion (US? Deutsch?), daß er Befehle falsch interpretiert. (Inhalte Contents)

Grüße, ich

  1. Hauptverdächtiger:
    Der Befehl zum schützen/öffnen steht außerhalb der Sub
  • genau daran lag es!

Da ich – als Neuling, was die Makros angeht – die Befehle schön brav ganz an den Anfang bzw. ganz an das Ende gesetzt hatte, konnte dies auch nicht funktionieren.
Mit „außerhalb des Sub“ konnte ich erst mal auch nichts anfangen.
Nun ist aber frau wieder etwas schlauer.
Ich danke dir für die Lösung!

Gruß Lena

Eine Frage noch:
Bei mir ist nach Ausführen eines Makros die Rückgängig-Aktion nicht mehr möglich. Ist auch dieses Problem lösbar?

-)

Bei mir auch nicht. Es liegt daran, daß, banal ausgedrückt, die Befehle des Makros „von innen“ kommen und nicht von außen, wie bei der Tastatureingabe, wo sie Excel-intern zwischengespeichert werden.
Das ist aber meine ganz persönliche meinung ohne anspruch auf Richtigkeit. Aber ich kann es mir nur so vorstellen.

Grüße, ich.
Bei Fragen, nur zu!

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hab noch was vergessen:
UNBEDINGT das VBA-Projekt mit Passwort schützen, weil sonst jeder Dein Makro lesen kann und da steht das Passwort für die Arbeitsmappe im Klartext drin:
Das geht so:
VBA-Editor öffnen [ALT] + [F11]
In der Menüleiste des aktiven Makros -> Extras -> Eigenschaften von VBA-Projekt -> Registerkarte „Schutz“ die Option „Projekt für die anzeige sperren“ aktivieren.
Passwort vergeben.
Fertisch.
Und das Passwort merken!!!

Dann solltest Du noch ein Zertifikat ausstellen, damit die User nicht jedesmal die Abfrage bekommen, ob sie die Makros aktivieren sollen.
Steht auch unter Extras.
Der rest mit der Zertifizierung steht in der windows-Hilfe

Grüße, Fritz

… und solltest Du zwischenzeitlich noch keine Antwort auf die Frage nach dem „Debuggen“ erhalten haben:
frei übersetzt steht das für „Fehlersuche“ bzw. „Fehler-Entfernung“
Wenn Du „Debug“ anklickst, dann siehst Du im Makro-Code die Stelle, an der das Makro „ausgestiegen“ ist. Somit kannst/könntest Du genau an dieser Stelle mit der „Reparatur“ ansetzen…
Viel Erfolg weiterhin.
Gruß
Eneri

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]