Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: schließen und gleich wieder öffnen

schließen und gleich wieder öffnen
12.02.2018 12:04:23
Markus
Hallo liebe Community,
ich suche nach einer Lösung eine Datei zu schließen (was schon funktioniert) und dann aber wieder nach dem schließen gleich erneut zu öffnen nach einer bestimmten Zeitspanne, dabei möchte ich aber keinen festen Pfad angeben extra für die zu öffnende Datei, sondern er soll erkennen welche Datei geschlossen wurde und diese auch gleich wieder öffnen, da sich dieser Pfad immer wieder ändert. Also er soll die Datei öffnen die er geschlossen hat und erkennen um welche es sich handelte.
Ich stellte mir das so vor: Per Doppelklick wird die Datei geöffnet, dann auf Buttondruck wird sie geschlossen und danach gleich nach 2 Sekunden aber wieder geöffnet, (die selbe Datei), dabei sollen aber keine Änderungen gespeichert werden und es soll auch nicht nachgefragt werden ob gespeichert werden soll.
So weit bin ich bereits:

Sub Start()
pfad = ActiveWorkbook.Path
Application.OnTime Now + TimeValue("00:00:02"), Application.Workbooks.Open(pfad)
MsgBox "Die Arbeitsmappe wurde wieder erfolgreich geöffnet"
End Sub

Sub schließen()
'ActiveWorkbook.Close
'ActiveWorkbook.Close savechanges:=False
ActiveWorkbook.Close (False)
'ThisWorkbook.Close True
End Sub
Sub Öffnen()
ThisWorkbook.Activate
'Application.OnTime Now + TimeValue("00:00:10"),ThisWorkbook.Name & "!Start"
Call Start
End Sub

Das schließen funktioniert immer, aber er öffnet es nicht wieder nach den 2 Sekunden, was mache  _
ich da falsch?
Hoffe jemand kann mir da weiterhelfen
Beste Grüße
Markus


		
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: schließen und gleich wieder öffnen
12.02.2018 12:11:16
mumpel
Hallo!
Du kannst den Dateinamen der aktiven Datei mit ActiveWorkbook.Fullname in einer Variablen speichern und damit die Datei wieder öffnen.
Gruß, René
Nachtrag
12.02.2018 12:15:40
mumpel
"ActiveWorkbook.Path" reicht natürlich nicht. Das ist ja nur das Verzeichnis ohne Dateinamen. Da sollte eigentlich eine Fehlermeldung kommen.
Anzeige
AW: Nachtrag
12.02.2018 14:10:49
Markus
Hallo Mumpel,
danke erstmal für Deine Antwort. Ich habe es versucht und das mit dem FullName ersetzt mir meine Pfadvariable sogar, soweit habe ich es verstanden und der Pfad mit der richtigen Datei wird mir auch ausgegeben (MsgBox-Prüfung). Jedoch öffnet er nach wie vor die Datei nicht wieder, obwohl ich ihm doch sage er soll die Prozedur Start Ausführen und dann per Zeitspanne von 2 Sekunden die Datei wieder öffnen, die Variable habe ich doch in dieser Zeile Application.OnTime Now + TimeValue("00:00:02"), Application.Workbooks.Open(Dateivariable) per Aufruf mit drinstehen (Dateivariable), aber trotzdem öffnet er die Datei nicht wieder. :(
Folgendermaßen sieht jetzt mein Code aus:

Sub Start()
Dateivariable = ActiveWorkbook.FullName
MsgBox ActiveWorkbook.FullName
'pfad = ActiveWorkbook.Path & "\" & Dateivariable
'MsgBox pfad
Application.OnTime Now + TimeValue("00:00:02"), Application.Workbooks.Open(Dateivariable)
MsgBox "Die Arbeitsmappe wurde wieder erfolgreich geöffnet"
End Sub


Sub Öffnen()
ThisWorkbook.Activate
'Application.OnTime Now + TimeValue("00:00:10"),ThisWorkbook.Name & "!Start")
Call Start
End Sub


Sub schließen()
'ActiveWorkbook.Close
'ActiveWorkbook.Close savechanges:=False
ActiveWorkbook.Close (False)
'ThisWorkbook.Close True
MsgBox "Test passiert hier noch was?"
Call Öffnen
End Sub

Was mache ich da noch falsch? Soweit ich das verstehe führt er die Prozedur öffnen gar nicht aus nach dem ActiveWorkbook.Close (False) und somit auch nicht die Startprozedur, aber wie ändere ich das bzw. sage ihm er soll die Prozedur Öffnen nach dem Schließen weiterverarbeiten? (die ja dann erst die Startprozedur aufruft)
Übringens kam bei mir keine Fehlermeldung, oban ich nur den Pfad angegeben hatte ohne Dateiname, das nur der Vollständigkeit halber, aber das funktioniert ja jetzt mit der FullName Sache, aber wieder öffnen der Datei, leider Fehlanzeige.
Beste Grüße
Markus
Anzeige
AW: Nachtrag
12.02.2018 17:36:52
Mullit
Hallo,
da reicht eigentlich zunächst sowas:
Option Explicit
Public Sub prcCloseFile()
Call Application.OnTime(EarliestTime:=Now + TimeSerial(0, 0, 2), _
Procedure:="prcDummy")
Call ThisWorkbook.Close(SaveChanges:=False)
End Sub
Private Sub prcDummy()
Call ThisWorkbook.Activate
End Sub

Gruß, Mullit
Anzeige
AW: Nachtrag
13.02.2018 16:44:43
Markus
Danke Mullit hat bei mir gut funktioniert :)
Nun wollte ich jedoch mal das eine und mal das andere Workbook schließen lassen und dann wieder öffnen, nur bisher bekomme ich das nicht hin, immer wird wieder das selbe Workbook geschlossen und geöffnet.
Folgenden Code habe ich mir bisher aus Deinem abgeleitet:

Public Sub prcCloseFile2()
Call Application.OnTime(EarliestTime:=Now + TimeSerial(0, 0, 10), _
Procedure:="prcDummy2")
Call ThisWorkbook.Close(SaveChanges:=True)
End Sub


Public Sub prcCloseFile()
Call Application.OnTime(EarliestTime:=Now + TimeSerial(0, 0, 2), _
Procedure:="prcDummy")
MsgBox "Davor"
Call prcCloseFile2
MsgBox "Danach"
Call ThisWorkbook.Close(SaveChanges:=False)
End Sub


Private Sub prcDummy()
Call Workbooks(3).Activate
End Sub


Private Sub prcDummy2()
Call Workbooks(2).Activate
End Sub

Er sollte das aktive Workbook wechseln und mal im dritten stehen und mal im zweiten stehen und dann wenn er im zweiten steht das dritte öffnen und schließen, halt so in dem Maße, aber er macht es wie gesagt immer nur für das Erste Workbook. Warum frage ich mich?
Ich wollte gern dieses prcCloseFile2 aufrufen doch er nimmt es nicht an und selbst wenn ich es einzeln mache öffnet und schließt er immer nur das erste Workbook. Beim ersten mal ist das auch richtig, aber dann sollte er das zweite schließen und wieder aufmachen und dann das dritte und stets sollte ein anderes Workbook aktiv sein.
Auch frage ich mich was bedeutet eigentlich dieses Call ThisWorkbook.Activate, ich hatte das mal weggelassen und es funktionierte trotzdem, das fand ich seltsam, aber halt auch nur wieder für das Erste Workbook. Also wozu braucht er das überhaupt?
Hoffe kannst mir da weiterhelfen bzw. jemand der es liest.
Beste Grüße
Markus
Anzeige
AW: Nachtrag
13.02.2018 16:45:48
Markus
Danke Mullit hat bei mir gut funktioniert :)
Nun wollte ich jedoch mal das eine und mal das andere Workbook schließen lassen und dann wieder öffnen, nur bisher bekomme ich das nicht hin, immer wird wieder das selbe Workbook geschlossen und geöffnet.
Folgenden Code habe ich mir bisher aus Deinem abgeleitet:

Public Sub prcCloseFile2()
Call Application.OnTime(EarliestTime:=Now + TimeSerial(0, 0, 10), _
Procedure:="prcDummy2")
Call ThisWorkbook.Close(SaveChanges:=True)
End Sub


Public Sub prcCloseFile()
Call Application.OnTime(EarliestTime:=Now + TimeSerial(0, 0, 2), _
Procedure:="prcDummy")
MsgBox "Davor"
Call prcCloseFile2
MsgBox "Danach"
Call ThisWorkbook.Close(SaveChanges:=False)
End Sub


Private Sub prcDummy()
Call Workbooks(3).Activate
End Sub


Private Sub prcDummy2()
Call Workbooks(2).Activate
End Sub

Er sollte das aktive Workbook wechseln und mal im dritten stehen und mal im zweiten stehen und dann wenn er im zweiten steht das dritte öffnen und schließen, halt so in dem Maße, aber er macht es wie gesagt immer nur für das Erste Workbook. Warum frage ich mich?
Ich wollte gern dieses prcCloseFile2 aufrufen doch er nimmt es nicht an und selbst wenn ich es einzeln mache öffnet und schließt er immer nur das erste Workbook. Beim ersten mal ist das auch richtig, aber dann sollte er das zweite schließen und wieder aufmachen und dann das dritte und stets sollte ein anderes Workbook aktiv sein.
Auch frage ich mich was bedeutet eigentlich dieses Call ThisWorkbook.Activate, ich hatte das mal weggelassen und es funktionierte trotzdem, das fand ich seltsam, aber halt auch nur wieder für das Erste Workbook. Also wozu braucht er das überhaupt?
Hoffe kannst mir da weiterhelfen bzw. jemand der es liest.
Beste Grüße
Markus
Anzeige
AW: Nachtrag
14.02.2018 10:03:45
mumpel
Wo stehen denn die Makros? Du solltest sie in ein Add-In packen. Steuern kannst Du das ja über Schaltflächen im Menüband.
AW: Nachtrag
15.02.2018 14:00:07
Markus
Hallo Mullit, danke für Deine Rückantwort. :)
Nun die Makros stehen alle in einem separaten Modul [Modul(2)], welches über einen CommandButton1_Click (In Excel Objekten unter Tabelle1 eingetragen)aufgerufen werden. Der Aufruf findest über prcCloseFile in diesem CommandButton1_Click statt, der sich in Wokrbook1 befindet. Dieser sollte halt dann die Prozedure prcCloseFile2 aufrufen, was und dann halt ein anderes Workbook für sich schließen und wieder öffnen.
Habe weiter probiert, aber es geht immer nur für das eine Workbook, nicht aber wenn ich ein anderes Workbook aktiv schalte und dann Beispielsweise den schließen/öffnen Mechanismus auf Workbook 2 anwenden möchte.
Um dies zu verdeutlichen hier nochmals etwas genauer:
Workbook1 schließen und zeitnahes öffen - funktioniert Focus der aktiven Mappe verändern und auf Workbook3 setzen - funktioniert jetzt soll aber Workbook2 geschlossen werden und zeitnah (andere Zeit) wieder geöffnet - geht nicht, macht das wieder nur für Wookbook1, leider
Dann sollte halt der Focus sich ändern und das Workbook2 aktiv gesetzt werden
Und dann sollte halt das Workbook3 geschlossen und zeitnah wieder geöffnet werden.
Aber wie gesagt das Problem ist, das ich es nur für ein Workbook hinbekomme mit dem schließen und gleichzeitigen wieder öffnen, nicht aber für mehrere.
Mit dem " Add-In packen. Steuern kannst Du das ja über Schaltflächen im Menüband" war nicht so angedacht, wüsste auch nicht wie ich das machen sollte, wäre zwar interessant zu wissen, aber ich wollte es so wie es bei dem einen Workbook bereits geht mit dem schließen und das selbe Workbook wieder öffnen, genauso für die anderen zwei Workbooks haben.
Hoffe kannst mir da helfen, irgendwie drehe ich mich immer wieder im Kreis, ohne das es bei wenigstens einem von den anderen Workbooks klappt. :(
Beste Grüße
Markus
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Schließen und Gleich Wieder Öffnen einer Excel-Datei


Schritt-für-Schritt-Anleitung

  1. Öffne den Visual Basic for Applications (VBA) Editor:

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul hinzu:

    • Klicke mit der rechten Maustaste auf „VBAProject (DeinWorkbookName)“ > Einfügen > Modul.
  3. Kopiere den folgenden Code in das Modul:

    Option Explicit
    
    Public Sub prcCloseFile()
       Dim Dateivariable As String
       Dateivariable = ActiveWorkbook.FullName
       Application.OnTime Now + TimeValue("00:00:02"), "prcOpenFile"
       ActiveWorkbook.Close SaveChanges:=False
    End Sub
    
    Public Sub prcOpenFile()
       Workbooks.Open (Dateivariable)
       MsgBox "Die Arbeitsmappe wurde wieder erfolgreich geöffnet"
    End Sub
  4. Füge einen Button hinzu:

    • Gehe zurück zu Excel, füge über die Entwicklertools einen Button ein und verlinke diesen mit prcCloseFile.
  5. Testen:

    • Klicke auf den Button, um die Arbeitsmappe zu schließen und sie nach 2 Sekunden automatisch wieder zu öffnen.

Häufige Fehler und Lösungen

  • Excel öffnet und schließt gleich wieder:

    • Stelle sicher, dass der Code in einem Modul steht und nicht in einem Arbeitsblattmodul.
  • Datei öffnet sich nicht nach dem Schließen:

    • Überprüfe, ob ActiveWorkbook.FullName korrekt zugewiesen wird. Möglicherweise sollte der Code zur Öffnung der Datei in eine andere Subroutine verschoben werden, um sicherzustellen, dass sie nach dem Schließen ausgeführt wird.
  • Fehlermeldung bei Verwendung von ActiveWorkbook.Close:

    • Stelle sicher, dass du SaveChanges:=False verwendest, um das Speichern von Änderungen zu verhindern.

Alternative Methoden

Falls du eine andere Methode ausprobieren möchtest, kannst du auch die Verwendung von Application.OnTime zur Planung des Schließens und Öffnens einer Datei nutzen. Hier ist ein Beispiel:

Public Sub prcCloseFileAlternative()
    Dim Dateivariable As String
    Dateivariable = ActiveWorkbook.FullName
    Application.OnTime Now + TimeValue("00:00:02"), "prcOpenFile"
    ThisWorkbook.Close SaveChanges:=False
End Sub

Diese Methode funktioniert ähnlich, verwendet jedoch ThisWorkbook anstelle von ActiveWorkbook.


Praktische Beispiele

  1. Einfaches Schließen und Wiederöffnen:

    Public Sub Beispiel1()
       Call prcCloseFile
    End Sub
  2. Mehrere Workbooks verwalten: Wenn du mehrere Workbooks schließen und wieder öffnen möchtest, kannst du eine Schleife implementieren, um durch eine Liste von Workbooks zu iterieren.


Tipps für Profis

  • Verwende Application.Wait statt Application.OnTime, wenn du nur eine einfache Verzögerung benötigst:

    Application.Wait Now + TimeValue("00:00:02")
  • Fehlerbehandlung einfügen: Füge On Error Resume Next zu Beginn deiner Prozeduren hinzu, um unerwartete Fehler zu vermeiden.

  • Makros in einem Add-In speichern: Wenn du die Funktionalität in mehreren Workbooks nutzen möchtest, kannst du deine Makros in einer Add-In-Datei speichern.


FAQ: Häufige Fragen

1. Warum funktioniert ActiveWorkbook.Close SaveChanges:=True nicht?
Wenn du SaveChanges:=True verwendest, wird Excel nach dem Speichern der Änderungen geschlossen. Um das Schließen ohne Speichern zu gewährleisten, nutze SaveChanges:=False.

2. Wie kann ich sicherstellen, dass die richtigen Workbooks geöffnet und geschlossen werden?
Verwende Workbooks("WorkbookName").Close und Workbooks.Open("WorkbookName"), um sicherzustellen, dass du gezielt mit bestimmten Workbooks arbeitest.

3. Was bedeutet Call ThisWorkbook.Activate?
Dieser Befehl aktiviert das aktuelle Workbook, was wichtig sein kann, wenn du mit mehreren Workbooks arbeitest, um sicherzustellen, dass die richtigen Objekte im Fokus sind.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige