Onderwerp


Automatisch een werkboek sluiten

Veel mensen werken in een omgeving waar gegevens vertrouwelijk zijn. Zeker als het om cijfers gaat is een Excel werkboek dan een bron van zorg. Naast het beveiligen van specifieke cellen of werkbladen kun je een werkboek ook zo inrichten dat het zichzelf automatisch sluit als er een bepaalde tijd niets aan gewijzigd is. Een paar simpele VBA procedures maken dat mogelijk.




Informatie


A) Kopieer de volgende procedures en plak deze in de VBA editor (ALT+F11) in ThisWorkbook.

Option Explicit
Private Sub Workbook_Open()
Call SetTime
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Call Disable
End Sub

Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
Call Disable
Call SetTime
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Excel.Range)
Call Disable
Call SetTime
End Sub

B) Kopieer de volgende procedures en plak deze in de VBA editor (ALT+F11) in een gewone Module.

Option Explicit
Dim DownTime As Date

Public Sub SetTime()
DownTime = Now + TimeValue("00:10:00")
Application.OnTime DownTime, "Close_Workbook"
End Sub

Public Sub Close_Workbook()
ThisWorkbook.Close True
End Sub

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




Hoe het werkt.
Als het werkboek wordt geopend, wordt via de procedure SetTime bepaald na hoeveel tijd de procedure Close_Workbook moeten worden uitgevoerd. In dit voorbeeld is dat na 10 minuten (DownTime = Now + TimeValue("00:10:00").

De Workbook events SheetCalculate en SheetSelectionChange worden geactiveerd als er wijzigingen in het werkboek worden aangebracht. Als dat gebeurt worden de procedures Disable en SetTime uitgevoerd. Dit zorgt er voor dat de oude ingestelde tijd verloopt en er een nieuwe periode (van 10 minuten) wordt ingesteld die bepaald of het werkboek afgesloten moet worden.

Als de periode van 10 minuten verstrijkt wordt de procedure Close_Workbook uitgevoerd en wordt het werkboek afgesloten, waarbij eventuele niet opgeslagen wijzigingen worden bewaard ThisWorkbook.Close True.