• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Excel of werkblad automatisch opslaan en afsluiten na 5 minuten inactiviteit

Status
Niet open voor verdere reacties.

Sander1970

Gebruiker
Lid geworden
31 aug 2016
Berichten
7
Ik werk in een omgeving waarin een Excel-bestand wordt gedeeld.
Zolang één persoon er aan werkt kan het door anderen allen worden ingezien, niet worden bewerkt.
Ga ik weg, dan blijft het 'open staan' en kan niemand er aan werken.

Het zou mooi zijn dat als ik 5 minuten niet aan het bestand werk, dit automatisch wordt opgeslagen en Excel, of de betreffende map, automatisch wordt afgesloten.
Is zoiets mogelijk?
 
plaats deze in thisworkbook:
Code:
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

en deze in een losse module:
Code:
Dim DownTime As Date

Sub SetTimer()
    DownTime = Now + TimeValue("00:05: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
    ThisWorkbook.Save
    ThisWorkbook.Close
End Sub


Wees er wel op bedacht dat wanneer een collega het bestand totaal heeft verpest en ten einde raad een oplossing gaat zoeken ( google, of collega raadplegen) dat de ellende na 5 minuten wordt opgeslagen.
 
Laatst bewerkt:
ergens een bug

Dag SjorsR,
bedankt voor de supersnelle reactie.
Ik ben enigszins thuis in 'ouderwets' programmeren, maar nog niet in VBA.
Daarin ga ik me verder verdiepen.

Dus nog een vraag over de script die je hebt gestuurd.
Als ik alles opsla om krijg ik meteen een foutmelding in regel 4 van het stukje onder Worksheet:

Private Sub Workbook_BeforeClose(Cancel As Boolean)

De melding luidt: "Compileerfout. Sub of function is niet gedefinieerd."
Ik kan hier (nog) niet mee overweg. Graag hulp.
Met dank!
 
Als je het exact doet zoals SjonR laat zien en die subs ook in de juiste sectie zet is dat gewoon goed.
Plaats dus eens je document waarin je dat hebt gedaan.
 
heb je die andere tekst wel in een module staan?

Hier een voorbeeldbestandje die zich na 15 sec afsluit
 

Bijlagen

Laatst bewerkt:
bug gevonden

Ik heb de fout gevonden:
in plaats van een module aan te maken en de programmaregels er in te zetten,had ik deze regels in een werkblad gezet.
Alles werkt.
Hartelijk dank.

Waar heb je deze kennis opgedaan.
Aanbeveling voor een specifiek boek?
Ik hou me aanbevolen.
Sander

Voor alle netheid: Over twee dagen sluit ik het topic.
 
Die code heb ik ooit eens van internet geplukt, maar om iets van VBA te leren, zou je een het boek van Wim de Groot kunnen proberen.

Maar ik probeer alles via google te leren. Kom ik er niet uit, dan stel ik mijn vraag hier.
 
Laatst bewerkt:
Melding op het scherm

PS: is het ook mogelijk een melding op het scherm achter te laten.

Uw bestand is automatisch opgeslagen.
 
Tuurlijk.
Code:
Sub ShutDown()
    Application.DisplayAlerts = False
    ThisWorkbook.Save
    [COLOR="#FF0000"]MsgBox "Uw bestand is automatisch opgeslagen.", vbInformation[/COLOR]
    ThisWorkbook.Close
End Sub

Maar dan gebeurt er niet wat je wilt.
Het bestand wordt dan niet gesloten.
 
Laatst bewerkt:
Geweldig

edmoor,

Bedankt, wat bijzonder toch als je zoveel kennis hebt, als of je het uit je mouw schudt.

Thnx.

Willem
 
Ik heb denk ik ook wel een oplossing. Momentje nog...
 
Ok, maak er dit van:
Code:
Sub ShutDown()
    Application.DisplayAlerts = False
    ThisWorkbook.Save

    vbs = Environ("temp") & "\BestandGesloten.vbs"
    Open vbs For Output As #1
    Print #1, "MsgBox " & Chr(34) & "Uw bestand is automatisch opgeslagen." & Chr(34)
    Close #1
    Shell ("wscript " & vbs)

    ThisWorkbook.Close
End Sub
 
Laatst bewerkt:
En jawel het werkt perfect.

edmoor,

Het werkt fantastisch.

Keurige afsluiting zo.

Heel erg bedankt voor het programma en de snelheid.

Groet,

Willem.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan