Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA zum automatischem Schließen

VBA zum automatischem Schließen
25.03.2022 07:14:34
Lara
Guten Morgen,
wir haben das Problem, dass User immer wieder Dateien nicht schließen und im schlimmsten Fall bis zum nächsten Morgen geöffnet lassen.
Dieses Problem habe ich schon lösen können, die Datei schließt sich jetzt nach 15 Minuten Inaktivität automatisch.
Dazu ist unter "Diese Arbeitsmappe" folgendes hinterlegt:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
Call AutoCloseStop
End Sub
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
AutoCloseStop
AutoCloseStart
End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
AutoCloseStop
AutoCloseStart
End Sub
Private Sub Workbook_WindowActivate(ByVal Wn As Window)
AutoCloseStop
AutoCloseStart
End Sub
Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
AutoCloseStop
AutoCloseStart
End Sub
Sowie als öffentliches Modul:

Public Const ciIntervall As Integer = 1
Public Const dsMacro As String = "AutoClose"
Public gdNextTime As Double
Private iWait As Integer
Const cMax = 900 ' -> 15 Minuten
Dim Zeit As Date
Sub AutoClose()
iWait = iWait + 1
If cMax - iWait > 0 Then
Application.StatusBar = Format(Zeit - TimeSerial(0, 0, iWait), "hh:mm:ss")
gdNextTime = Now + TimeSerial(0, 0, ciIntervall)
Application.OnTime gdNextTime, dsMacro
Else
ThisWorkbook.Save
ThisWorkbook.Close
End If
End Sub
Sub AutoCloseStart()
iWait = 0
Zeit = TimeSerial(0, 0, cMax)
Application.StatusBar = Zeit
Call AutoClose
End Sub
Sub AutoCloseStop()
On Error Resume Next
Application.StatusBar = ""
Application.OnTime earliesttime:=gdNextTime, _
procedure:=dsMacro, schedule:=False
End Sub
Das funktioniert soweit auch sehr gut, auch wenn ich nebenbei eine weitere Datei öffne.
Was leider nicht mehr funktioniert ist das manuelle schließen der Datei mit dem Timer, sobald eine zweite Datei geöffnet ist.
Er schließt zwar die Datei, öffnet Sie jedoch direkt wieder neu. Das mit dem manuellen schließen klappt nur, wenn keine andere Datei geöffnet ist.
Hat jemand eine Idee, was ich an der Datei ändern muss, damit das klappt?
Vielen Dank schonmal :)
Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA zum automatischem Schließen
25.03.2022 10:55:02
PawelPopolski
Hallo,
dein Problem wird durch die Reihenfolge der Events verursacht. Beim Schliessen der Datei wird zuerst Workbook_BeforeClose ausgeführt. Danach aber noch Workbook_WindowDeactivate. Hier steht aber wieder AutoCloseStart und du verfängst dich in einer Endlosschleife.
Entweder das Workbook_WindowDeactivate raus lassen oder in DieseArbeitsmappe folgende Änderungen vornehmen
Option Explicit
Dim out As Boolean

Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
Call AutoCloseStop
 out=true
End Sub

Private Sub Workbook_Open()
out = False
End Sub

.
.
.

Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
AutoCloseStop
 If out = False Then AutoCloseStart
End Sub

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Automatisches Schließen von Excel-Dateien mit VBA


Schritt-für-Schritt-Anleitung

Um eine Excel-Datei automatisch zu schließen, wenn sie für eine bestimmte Zeit inaktiv ist, kannst Du den folgenden VBA-Code verwenden. Dieser Code schließt die Excel-Datei nach 15 Minuten Inaktivität.

  1. Öffne Deine Excel-Datei und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge den folgenden Code in das Modul „Diese Arbeitsmappe“ ein:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    On Error Resume Next
    Call AutoCloseStop
End Sub

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
    AutoCloseStop
    AutoCloseStart
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    AutoCloseStop
    AutoCloseStart
End Sub

Private Sub Workbook_WindowActivate(ByVal Wn As Window)
    AutoCloseStop
    AutoCloseStart
End Sub

Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
    AutoCloseStop
    AutoCloseStart
End Sub
  1. Füge den folgenden Code in ein neues Modul ein:
Public Const ciIntervall As Integer = 1
Public Const dsMacro As String = "AutoClose"
Public gdNextTime As Double
Private iWait As Integer
Const cMax = 900 ' 15 Minuten
Dim Zeit As Date

Sub AutoClose()
    iWait = iWait + 1
    If cMax - iWait > 0 Then
        Application.StatusBar = Format(Zeit - TimeSerial(0, 0, iWait), "hh:mm:ss")
        gdNextTime = Now + TimeSerial(0, 0, ciIntervall)
        Application.OnTime gdNextTime, dsMacro
    Else
        ThisWorkbook.Save
        ThisWorkbook.Close
    End If
End Sub

Sub AutoCloseStart()
    iWait = 0
    Zeit = TimeSerial(0, 0, cMax)
    Application.StatusBar = Zeit
    Call AutoClose
End Sub

Sub AutoCloseStop()
    On Error Resume Next
    Application.StatusBar = ""
    Application.OnTime earliesttime:=gdNextTime, procedure:=dsMacro, schedule:=False
End Sub
  1. Speichere Deine Datei als eine Excel-Arbeitsmappe mit Makros (z.B. .xlsm).

Häufige Fehler und Lösungen

  • Problem: Die Excel-Datei schließt sich direkt nach dem Öffnen.

    • Lösung: Überprüfe den Code auf Fehler und stelle sicher, dass keine Endlosschleifen durch die Ereignisse verursacht werden. Achte besonders auf die Reihenfolge der Workbook_WindowDeactivate und Workbook_BeforeClose Ereignisse.
  • Problem: Die Datei wird nicht manuell geschlossen.

    • Lösung: Füge eine Variable out in Deinem Code ein, um die Schließroutine zu steuern. Siehe Beispiel von Benutzer PawelPopolski:
Dim out As Boolean

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    On Error Resume Next
    Call AutoCloseStop
    out = True
End Sub

Private Sub Workbook_Open()
    out = False
End Sub

Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
    AutoCloseStop
    If out = False Then AutoCloseStart
End Sub

Alternative Methoden

Es gibt verschiedene Ansätze, um eine Excel-Datei automatisch zu schließen. Eine Möglichkeit ist die Verwendung von Windows-Taskplaner, um Excel zu bestimmten Zeiten zu schließen. Dies erfordert jedoch, dass Du eine separate Batchdatei erstellst, die den Excel-Prozess beendet.


Praktische Beispiele

  • Beispiel 1: Wenn Du häufig an mehreren Excel-Dateien arbeitest und sicherstellen möchtest, dass keine im Hintergrund bleibt, kannst Du den oben genannten VBA-Code verwenden, um die Datei automatisch nach 15 Minuten Inaktivität zu schließen.

  • Beispiel 2: Wenn Du eine Excel-Datei für Präsentationen verwendest, kannst Du den Code anpassen, um die Datei sofort zu beenden, wenn Du die Präsentation nicht mehr benötigst.


Tipps für Profis

  • Verwende Workbook_Open: Setze die out-Variable zurück, wenn die Arbeitsmappe geöffnet wird, um unerwartete Schließungen zu vermeiden.
  • Optimierung der Performance: Teste den Code in einer Testdatei, um sicherzustellen, dass er wie gewünscht funktioniert, bevor Du ihn in wichtigen Dateien verwendest.
  • Regelmäßige Sicherungen: Stelle sicher, dass Du Deine Excel-Dateien regelmäßig speicherst, um Datenverluste zu vermeiden, wenn die Datei automatisch geschlossen wird.

FAQ: Häufige Fragen

1. Wie kann ich die Zeit bis zum automatischen Schließen ändern?
Du kannst den Wert von Const cMax = 900 im Code ändern. Der Wert ist in Sekunden angegeben (900 Sekunden = 15 Minuten).

2. Funktioniert dieser Code in allen Excel-Versionen?
Ja, der VBA-Code sollte in den meisten aktuellen Excel-Versionen (z.B. Excel 2016, 2019, 365) funktionieren. Achte darauf, dass Makros aktiviert 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