mreske
Goto Top

Workbook open funktioniert nicht, wenn Workbook per Schaltfläche neu gestartet wird

Hallo

folgende Vorgehensweise funktioniert nicht:

a.) Geöffnetes Dokument (Test.xlsm) soll per Schaltfläche ("Close and Open") neu geöffnet werden.
a.) diese Fehlermeldung soll dabei mit Application.DisplayAlerts = False unterdrückt werden:
"Test.xlsm ist bereits geöffnet. Wenn Sie es erneut öffnen, verlieren Sie damit alle Änderungen, die Sie eingegeben haben. Soll Test.xlsm erneut geöffnet werden?"
c.) beim Öffnen der Datei soll die MSGBox "Test" angezeigt werden.

Wenn ich nun die Schaltfläche "Close and Open" betätige, wird zwar die Datei neu geöffnet, aber die MessageBox wird nicht angezeigt (Workbook_Open wird also nicht ausgeführt).
Wenn ich anstatt die Schaltfläche zu drücken, die Datei über den Explorer öffne, dann wird Workbook_Open ausgeführt.

Hat jemand eine Ahnung warum das über die Schaltfläche nicht geht?

2018-06-13_113235

Danke

Content-Key: 376822

Url: https://administrator.de/contentid/376822

Ausgedruckt am: 28.03.2024 um 22:03 Uhr

Mitglied: emeriks
emeriks 13.06.2018 um 11:50:29 Uhr
Goto Top
Hi,
bist Du sicher, dass dabei die Datei ein zweites Mal parallel geöffnet wird?

Ich denke, für Excel ist das kein "Workbook_Open" sondern ein "Reload". Keine Ahnung, ob es dafür ein eigenes Event gibt.

E.
Mitglied: 136166
136166 13.06.2018 aktualisiert um 12:13:32 Uhr
Goto Top
Du hast da einen Denkfehler.
Ein Dokument selbst kann sich nicht erst selbst schließen und wieder neu öffnen, das geht so nicht, denn wie sollte das Makro das Dokument neu öffnen wenn im Dokument das Makro noch läuft und damit das Dokument also noch geöffnet ist??
Das geht nur aus einem anderen parallel geöffnetem Dokument oder aus einem anderen Instanz/Programm oder separatem VBS aus, oder per Exec extern gestartem Prozess (z.B. per Run-Methode) der das Neuöffnen nach dem Schließen übernimmt.
Mitglied: emeriks
emeriks 13.06.2018 um 12:05:01 Uhr
Goto Top
Ein Dokument selbst kann sich nicht selbst schließen und wieder neu öffnen,
Darum frage ich ja nach. Ich wollte des jetzt nicht extra ausprobieren.
Mitglied: 136166
136166 13.06.2018 aktualisiert um 12:05:42 Uhr
Goto Top
Zitat von @emeriks:
Darum frage ich ja nach. Ich wollte des jetzt nicht extra ausprobieren.
Ich hatte eigentlich Ihm geantwortet nicht dir ...
Mitglied: emeriks
emeriks 13.06.2018 um 12:05:59 Uhr
Goto Top
Ich weiß.
Mitglied: 136166
136166 13.06.2018 aktualisiert um 12:30:39 Uhr
Goto Top
Was du machen kannst wäre z.B. folgendes für den Code hinter dem Button:
Sub btnReload()
    CreateObject("Wscript.Shell").Run "cmd /c timeout /t 1 && start """" """ & ThisWorkbook.FullName & """", 0, False  
    ThisWorkbook.Close True
End Sub
Das startet eine asynchron gestartete versteckte Shell die 1 Sekunde wartet während das Dokument zwischenzeitlich geschlossen wird, und dann das Dokument nach der Pause erneut öffnet.
Mitglied: mreske
mreske 13.06.2018 aktualisiert um 12:36:54 Uhr
Goto Top
Hallo,
dass sich ein Dokument sich nicht selber schließen und wieder öffnen kann, ist schon klar.
Aber ich kann das Dokument ja z.B. über den Explorer einfach per Doppelklick noch mal öffnen, worauf dann die unten genannte Meldung erscheint.
Bei Klicken auf "Ja" wird dann die Datei neu geöffnet (und die vorherige verworfen) und die Workbook_Open ausgeführt. Die MSGBox "Test" erscheint.

Meldung:
"Test.xlsm ist bereits geöffnet. Wenn Sie es erneut öffnen, verlieren Sie damit alle Änderungen, die Sie eingegeben haben. Soll Test.xlsm erneut geöffnet werden?"

Aber anstatt über den Explorer zu öffnen, mache ich das über das Makro.

Die o.g. Meldung wird durch DisplayAlerts=False unterdrückt.

Das funktioniert auch soweit.

Nur wird mir beim Öffnen nicht die Workbook_Open ausgeführt.

Hier mal der Quellcode (die Datei liegt auf dem Desktop):

Diese Arbeitsmappe:
Private Sub Workbook_Open()
MsgBox "Test"
End Sub

Schaltfläche:
Private Sub CloseAndOpen_Click()
Application.DisplayAlerts = False
Workbooks.Open Filename:= _
"C:\Desktop\Test.xlsm"
Application.DisplayAlerts = True
End Sub
Mitglied: 136166
136166 13.06.2018 aktualisiert um 12:48:08 Uhr
Goto Top
Nur wird mir beim Öffnen nicht die Workbook_Open ausgeführt.
Logisch, weil du
Application.DisplayAlerts = False
vorher gesetzt hast und dir damit alle aufpoppenden Dialogfelder selber deaktivierst ... Das ist eine permanente Einstellung die Neustarts von Excel überlebt!

Siehe meine Lösung zum Reload für dein Problem in meinem letzten Post. So wie du das machen willst geht dass nicht.
Mitglied: 136166
136166 13.06.2018 aktualisiert um 13:04:51 Uhr
Goto Top
Guckst du
https://we.tl/ixBGaiP11K
Setzt das um was ich dir im Post oben geschrieben habe.

Application,DisplayAlerts = True
musst du natürlich vorher mindestens einmal im VBA ausführen (Über eine Testmethode oder im Direktfenster) damit die Ausgabe wieder aktiviert ist, denn wie gesagt, das ist eine permanente Einstellung die Neustarts von Excel überlebt.
Mitglied: mreske
mreske 13.06.2018 um 13:01:06 Uhr
Goto Top
Hallo decathlon,
vielen Dank, genau das habe ich gesucht.
Funktioniert super.
Danke
Mitglied: 136166
136166 13.06.2018 aktualisiert um 13:02:21 Uhr
Goto Top
Freut mich das es dir hilft face-smile.
Mitglied: mreske
mreske 13.06.2018 um 13:20:26 Uhr
Goto Top
Eine Frage hätte ich noch,

wie müsste der quellcode lauten wenn die Datei auf einem anderen Laufwerk liegt:

A:\Daten\Test\VBA\OpenAndClose.xlsm

Danke
Mitglied: 136166
136166 13.06.2018 aktualisiert um 13:23:02 Uhr
Goto Top
Zitat von @mreske:

Eine Frage hätte ich noch,

wie müsste der quellcode lauten wenn die Datei auf einem anderen Laufwerk liegt:

A:\Daten\Test\VBA\OpenAndClose.xlsm
Keine Änderung nötig, denn den Pfad holt es sich über ThisWorkbook.FullName automatisch.
Mitglied: mreske
mreske 13.06.2018 um 13:28:19 Uhr
Goto Top
Alles klar, Danke