Schutzmakro autom. schließen

Hallo,
ich bräuchte wieder einmal eure Hilfe.
Ich habe einen riesigen Dienstplan erstellt für unser „Bedarfsorientiertes-Schicht-Management“. Um dieses zu schützen habe ich ein kleines Schutzmakro gefertigt, was in einer anderen Datei ist. Diese Datei befindet sich in einem nicht für jedermann zugänglichen Ordner. Es läuft auch alles bestens.
Ich habe nur ein Problem, wenn das Makro von einer berechtigten Person abgerufen wird bleibt es auf seinem Rechner offen.
Ich möchte, wenn es den Schutz freigegeben hat bzw. wieder aktiviert hat, sich die Datei (Schutzmakro) wieder schließt.
Zum Makro alle Blätter schützen:

Private Sub CommandButton1_Click()
Sub AlleSchuetzen()
Dim Blatt As Worksheet
For Each Blatt In ActiveWorkbook.Worksheets
Blatt.Protect („schutz“)
Next Blatt
End Sub

Zum Makro alle Blätter freigeben:

Private Sub CommandButton2_Click()
Sub AlleFreilegen()
Dim Blatt As Worksheet
For Each Blatt In ActiveWorkbook.Worksheets
Blatt.Unprotect („schutz“)
Next Blatt
End Sub

Wie gesagt, wenn es seine Arbeit getan hat soll es wieder geschlossen werden. Ich bin leider nur einer, der was mit Formeln anfangen kann aber nicht mit VBA.

Danke im Voraus
Bernd

Hallo Bernd,

Ich habe einen riesigen Dienstplan erstellt für unser
„Bedarfsorientiertes-Schicht-Management“. Um dieses zu
schützen habe ich ein kleines Schutzmakro gefertigt, was in
einer anderen Datei ist. Diese Datei befindet sich in einem
nicht für jedermann zugänglichen Ordner. Es läuft auch alles
bestens.

da kann aber nix bestens laufen.

Private Sub CommandButton1_Click()
Sub AlleSchuetzen()

mag kein Debugger.

Und CommandButton1_Click kann auf eine Schaltfläche auf einem Tabellenblatt hindeuten.
Wenn dem so ist bezieht sich
ActiveWorkbook.Worksheets
auf das grad aktive Workbook, das ist das Workbook wo das Blatt mit der Schaltfläche ist, ergo greifst du damit nicht auf eine andere Datei zu.

„Close“ ist der Befehl um eine Mappe zu schließen, der Befehl hat noch den Parameter Savechanges, schau mal in F1 dazu.

Grundsätzlich würde ich die Sache anders angehen.
In der zu schützenden Mappe abfragen wer sie öffnet, Berechigter oder nicht, je nach dem den Kennwortschutz aufheben oder nicht.
Dies kann automatisiert geschehen beim Mappenöffnen indem
der Username abgefragt wird, nach Wunsch der in Windows oder der in Excel.
Oder halt eine Passwortabfrage die beim Mappenstart kommt.
Aber da kann man ja auch in Excel auf Extras–Schutz gehen…

Gruß
Reinhard

Hallo Reinhard, danke erst einmal für die Reaktion.
Ich habe zur besseren Anschauung einmal eine Ältere Datei von Dienstplan, das Schutzmakro und eine kurze Anleitung in eine .ZIP gelegt. Die Datei ist trotzdem 7,5 MB.

http://www.file-upload.net/download-3962257/Dienstpl…

Vielleicht habe ich mich falsch ausgedrückt.
Der Plan läuft einwandfrei. Das Makro schließt bis auf die „grünen“-Tabellenblätter alles.
In die grünen Tabellenblätter tragen sich die Kollegen ein.

Das Makro ist hinterlegt in einem Ordner der z.B. „Admin“ heißt und kann nur von 6 Personen geöffnet werden.

Der aktuelle Dienstplan wird derzeit von 174 Personen genutzt und kann von 6 Personen bearbeitet werden.
Wie gesagt, wenn einer der Berechtigten den Schutz aufhebt, soll das Makro nach getaner Arbeit wieder automatisch geschlossen werden.
Bis jetzt ist es so:
Person eins öffnet den Schutz, vergisst die Datei „Schutz“ zuschließen und verlässt das Haus.
Person zwei kann den Schutz nicht mehr arbeiten lassen. Dass ist mein Problem.

PS: Den Redaktionsschluss habe ich einmal raus gelassen.

Grüezi Bernd

Der aktuelle Dienstplan wird derzeit von 174 Personen genutzt
und kann von 6 Personen bearbeitet werden.

Person eins öffnet den Schutz, vergisst die Datei „Schutz“
zuschließen und verlässt das Haus.
Person zwei kann den Schutz nicht mehr arbeiten lassen. Dass
ist mein Problem.

Das heisst, das Problem ist, dass die Mappe mit dem Schutz-Code von PErson 1 nicht wieder geschlossen wird?

Dann bau doch ein zeitgesteuertes Makro ein, das dafür sorgt, dass diese Mappe nach z.B. 5 Minuten nicht Bearbeitung automatisch wieder geschlossen wird.

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Hallo Thomas,
Du hast den Finger auf mein Problem und zeigst mir gleich das nächste auf.
Wie geht das, wie sieht das aus und wohin setze ich es. Bestimmt gleich mit in dem Makro welches als Schließer und Öffner fungiert. Wenn du mir vielleicht dabei helfen könntest wäre ich dankbar.
LG Bernd

Grüezi Bernd

Sorry für die Wartezeit, hier hats gebrummt…

Du hast den Finger auf mein Problem und zeigst mir gleich das
nächste auf.
Wie geht das, wie sieht das aus und wohin setze ich es.
Bestimmt gleich mit in dem Makro welches als Schließer und
Öffner fungiert. Wenn du mir vielleicht dabei helfen könntest
wäre ich dankbar.

Wenn es einfach darum geht, die Mappe eine definierte Zeit nach dem öffnen automatisch zu schliessen, kannst Du die folgenden Zeilen mit in den Code der Mappe einbauen:

In ‚Diese Arbeitsmappe‘ die folgenden Zeilen:

Option Explicit

Private Sub Workbook\_Open()
 dteCloseTime = Now + TimeValue("00:00:10") 'Hier das Zeitintervall festlegen
 Application.OnTime dteCloseTime, "MappeSchliessen"
End Sub

Private Sub Workbook\_BeforeClose(Cancel As Boolean)
 On Error Resume Next
 Application.OnTime dteCloseTime, "MappeSchliessen", , False
End Sub

Und dann in einem allgemeinen Modul noch die folgenden

Option Explicit

Public dteCloseTime As Date

Public Sub MappeSchliessen()
 ThisWorkbook.Close False
End Sub

Nun die Mappe speichern und schliessen.
Beim erneuten öffnen dauert es nun (im Moment, das kannst Tu im Code drin einstellen) 10 Sekunden bis die Mappe ohne zu speichern automatisch wieder geschlossen wird.

Das Ganze könnte man noch erweitern, sodass die Mappe erst eine betimmte Zeit nicht verwendet wird bevor sie geschlossen wird.

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Hallo Thomas,
als erstes DANKE.

Als nächstes muss ich dir sagen, -ich verzweifle bald.

Was habe ich gemacht:

  1. Meine Datei „Schutzmakro“ geöffnet,
  2. Mit ALT+F11 das VBA-Projekt geöffnet,
  3. Wie du es beschrieben hast auf der linken Seite des VBA-Projekt ein Doppelklick
    auf „Diese Arbeitsmappe“ und im rechten Teil

Option Explicit

Private Sub Workbook_Open()
dteCloseTime = Now + TimeValue(„00:00:10“) 'Hier das Zeitintervall festlegen
Application.OnTime dteCloseTime, „MappeSchliessen“
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
Application.OnTime dteCloseTime, „MappeSchliessen“, , False
End Sub

eingefügt.
4. Nun weiß ich nicht so richtig wie es weitergeht.?!
Ich habe nun wieder auf der linken Seite des VBA-Proj.
auf „Tabelle1(Schutz)“ ein Doppelklick gegeben und dort
Den Rest des Codes eingegeben:

Option Explicit

Public dteCloseTime As Date

Public Sub MappeSchliessen()
ThisWorkbook.Close False
End Sub

  1. Nun gespeichert unter der Endung *.xlsm
  2. Beim Schließen passiert es :
    „Fehler beim Kompilieren
    Variable nicht definiert“
  • und unter „diese Arbeitsmappe“ wird
    Private Sub Workbook_BeforeClose(Cancel As Boolean) = gelb markiert
  • und
    dteCloseTime = markiert

Was mache ich FALSCH??

Bitte um weitere Hilfe
Danke, Bermd

PS. Ich habe Office 2007 Prof.

Hallo Bernd,

Was habe ich gemacht:

Klasse *sehr lob*, du hast dir Gedanken gemacht was Thomas interessieren könnte und genau deine Liste ist das was er als nächstes gefragt hätte, ala sag mal wie du vorgegenagen bist o.ä.

  1. Nun weiß ich nicht so richtig wie es weitergeht.?!
    Ich habe nun wieder auf der linken Seite des VBA-Proj.
    auf „Tabelle1(Schutz)“ ein Doppelklick gegeben und dort
    Den Rest des Codes eingegeben:

Das war falsch. Thomas sprach von einem allgemeinen Modul
Ein allgemeines Modul wird auch als Standardmodul oder auch basmain bezeichnet falls du mal bei Internetcodes über diese Begriffe stolperst.

„DieseArbeitsmappe“, „Tabelle1“, „Tabelle2“, usw. sind keine Standardmodule. (Es sind Klasssenmodule)

Ergo da den Code entfernen, dann oben Einfügen—Modul anklicken, dann erzeugt Vba ein neues Standardmodul, zB. Modul1.
Dortrein den Code.

Dann ist der Fehler mit "variable nicht deklariert wech, denn in Modul1 wird
Public dteCloseTime As Date
gefunden, in Tabelle1 nicht.

Probier es so und berichte.

Gruß
Reinhard

Hallo Reinhard, Hallo Thomas,

vielen Dank es funzelt prima. So habe ich mir es Vorgestellt.
Danke und wenn ich euch einmal einen Stein in den Vorgarten werfen kann,
sagt Bescheid.

Ich wünsche euch ein schönes Weihnachtsfest.
LG Bernd