Dave fragt sich, ob er das Schließen einer Arbeitsmappe nach einer bestimmten Zeit erzwingen kann, sofern sie derzeit nicht verwendet wird. In seinem Büro öffnen Mitarbeiter Arbeitsmappen, die sich auf dem Server befinden, und vergessen dann, dass sie geöffnet sind. In diesem Fall kann niemand anderes sie bearbeiten. Daher möchte er das Schließen von Arbeitsmappen erzwingen, wenn diese 60 Minuten lang unbeaufsichtigt bleiben.

Es ist möglich, dies mithilfe von Makros zu tun, aber Sie möchten dies möglicherweise nicht wirklich aus geschäftlicher oder benutzerorientierter Sicht tun. Angenommen, ein Benutzer hat drei Arbeitsmappen auf seinem System geöffnet, damit Vergleiche zwischen ihnen durchgeführt werden können. Es ist möglich, „gefesselt“ zu werden

mit zwei der Arbeitsmappen für eine Weile, wobei die dritte diejenige ist, die ein Herunterfahren auslöst. Der VBA von Excel ist nicht besonders diskriminierend. Wenn eine Arbeitsmappe geschlossen wird, ist dies normalerweise diejenige, die derzeit den Fokus hat.

Was machen Sie mit nicht gespeicherten Änderungen beim Schließen? Wenn Sie sie speichern, stoßen Sie auf das Problem, dass der Benutzer sie möglicherweise nicht speichern wollte. Wenn Sie sie nicht speichern, tritt das umgekehrte Problem auf – möglicherweise mussten viele Daten gespeichert werden. Sie können beim Abschlussvorgang nicht fragen, ob Informationen gespeichert werden sollen. das würde die Arbeitsmappe so sicher zusammenhalten wie offen (und unbenutzt).

Eine mögliche Lösung besteht darin, die Arbeitsmappe einfach freizugeben. Wenn Sie die Freigabe aktivieren (wie in anderen ExcelTips beschrieben), können mehrere Personen dieselbe Arbeitsmappe gleichzeitig öffnen. Wenn eine dieser Personen es offen lässt, ist niemand anderes belästigt, da sie es weiterhin öffnen und optional Änderungen in der Arbeitsmappe vornehmen können.

Wenn Sie sich für die makrobasierte Route entscheiden, ist die Lösung recht einfach. Sie benötigen eine Art Timer-Struktur (die mithilfe der OnTime-Methode einfach implementiert werden kann) und eine Möglichkeit, um zu überprüfen, ob jemand etwas in der Arbeitsmappe tut.

Fügen Sie zunächst einem Standardmakromodul den folgenden Code hinzu. Beachten Sie, dass drei Routinen hinzugefügt werden müssen:

Dim DownTime As Date

Sub SetTimer()

DownTime = Now + TimeValue("01:00:00")

Application.OnTime EarliestTime:=DownTime, _       Procedure:="ShutDown", Schedule:=True End Sub
Sub StopTimer()

On Error Resume Next     Application.OnTime EarliestTime:=DownTime, _       Procedure:="ShutDown", Schedule:=False  End Sub
Sub ShutDown()

Application.DisplayAlerts = False     With ThisWorkbook         .Saved = True         .Close     End With End Sub

Diese drei Routinen sind ziemlich einfach. Die ersten beiden schalten jeweils den Timer ein und aus. Beachten Sie, dass diese Routinen die DownTime-Variable verwenden, die außerhalb einer der Routinen deklariert ist. Auf diese Weise kann sein Inhalt in mehreren Routinen verwendet werden.

Die dritte Routine, ShutDown, schließt die Arbeitsmappe tatsächlich. Es wird nur aufgerufen, wenn die OnTime-Methode nach einer Stunde abläuft. Die Arbeitsmappe wird geschlossen, ohne dass vorgenommene Änderungen gespeichert werden.

Die nächsten Routinen (es gibt vier davon) müssen dem ThisWorkbook-Objekt hinzugefügt werden. Öffnen Sie den VBA-Editor und doppelklicken Sie im Projektexplorer auf das ThisWorkbook-Objekt. Platzieren Sie im Codefenster, das Excel öffnet, die folgenden Routinen:

Private Sub Workbook_Open()

Call SetTimer End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)

Call StopTimer End Sub
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)

Call StopTimer     Call SetTimer End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, _   ByVal Target As Excel.Range)

Call StopTimer     Call SetTimer End Sub

Die ersten beiden Routinen werden ausgelöst, wenn die Arbeitsmappe geöffnet und geschlossen wird. Sie starten den Timer und schalten ihn aus. Die beiden anderen Routinen werden automatisch ausgeführt, wenn ein Arbeitsblatt neu berechnet wird oder wenn jemand eine Auswahl in der Arbeitsmappe trifft. Beides sind gute Indikatoren dafür, dass jemand die Arbeitsmappe verwendet (sie ist nicht inaktiv geöffnet). Sie stoppen den Timer und starten ihn dann neu, sodass der einstündige Countdown von vorne beginnt.

Die Verwendung einer Reihe von Makros wie diesen hat einen Nachteil: Sie eliminieren effektiv die Rückgängig-Funktion von Excel. Wenn ein Makro ausgeführt wird, wird der Rückgängig-Stapel automatisch von Excel gelöscht. Da Makros bei jeder in der Arbeitsmappe vorgenommenen Änderung ausgeführt werden, können die Änderungen der Person nicht rückgängig gemacht werden. (Es gibt keine Möglichkeit, diesen Nachteil zu umgehen.)

_Hinweis: _

Wenn Sie wissen möchten, wie die auf dieser Seite (oder auf einer anderen Seite der ExcelTips-Websites) beschriebenen Makros verwendet werden, habe ich eine spezielle Seite vorbereitet, die hilfreiche Informationen enthält.

ExcelTips ist Ihre Quelle für kostengünstige Microsoft Excel-Schulungen.

Dieser Tipp (2281) gilt für Microsoft Excel 97, 2000, 2002 und 2003. Eine Version dieses Tipps für die Multifunktionsleistenschnittstelle von Excel (Excel 2007 und höher) finden Sie hier: