• 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.

aftellen van tijd starten en onderbreken

Status
Niet open voor verdere reacties.

CygneVoler

Gebruiker
Lid geworden
15 mei 2015
Berichten
234
Hoi excellers,

Bij het openen van het Workbook() wordt de volgende code gebruikt voor het aftellen van de tijd. (van 15 min naar 0).
5 seconden voor het einde wordt een Popup getoond met de waarschuwing dat het programma over 5 sec. automatich wordt afgesloten.
Dit werkt allemaal goed.

Code:
EndTime = Now + TimeValue("00:15:06")
  WarningTime = EndTime - TimeValue("00:00:05")
  Application.OnTime WarningTime, "Afsluiten", , True
  Application.OnTime EndTime, "CloseWB", , True
  AutoSluiten.Show
  StartAftellen


In de Module staat de volgende code en het oproepen van een "waarschuwingsbericht."


Code:
Sub CloseWB()
    Application.DisplayAlerts = False
    With ThisWorkbook
        .Saved = True
        .Close
    End With
    End Sub

Sub Afsluiten()
  WarningMessage.Show
End Sub

Sub VervolgAftellen()
NextTime = Now + TimeValue("00:00:01")
Sheet11.Range("N1").Value = EndTime - Now
If EndTime - Now < 0 Then CloseWB 'Exit Sub
Application.OnTime NextTime, "VervolgAftellen"
End Sub

Sub StartAftellen()
Sheet11.Unprotect Password:="XXX"
NextTime = Now + TimeValue("00:00:00")
Sheet11.Range("N1").NumberFormat = "mm:ss"
Application.OnTime NextTime, "VervolgAftellen"
Sheet11.Protect Password:="XXX"
End Sub

Nu wil ik voor onderhoud dat de (gestarte)tijd onderbroken wordt, of beter gezegd wordt gestopt.

Dat doe ik met de volgende code:

Code:
Application.OnTime NextTime, "VervolgAftellen", , False
Application.OnTime EndTime, "CloseWB", , False

Ook dat werkt.Dat wil zeggen de tijd stopt in de actieve cel N1

Maar wat ik niet voor elkaar krijg is dat wanneer ik de "stopknop" geactiveerd heb,
dat de melding van de warningmessage achterwege blijft.

Iemand enig idee?
Graag jullie advies/hulp
 
Gebruik een globale Boolean variabele die aangeeft of de timer draait of niet en controleer daar dan op in de Sub Afsluiten.
Bij het starten van de timer zet je die variabele op True en bij het stoppen op False.
 
Laatst bewerkt:
Hoi Edmoor, (waar is je mooie plaatje :D) bedankt voor je reactie. Ik heb nu in de module staan:

Code:
Sub PW_XXX()
Dim PW_XXX As String
Dim Afsluiten As Boolean

PW_XXX = Wachtwoord.TBX_Naam.Value
    If PW_XXX = "Naam" Then
        Application.OnTime NextTime, "VervolgAftellen", , False
        Application.OnTime EndTime, "CloseWB", , False
        Afsluiten = False
        If Afsluiten = False Then
        MsgBox "Aftellen is onderbroken!"
End If
End If

Maar de melding blijf komen! Kan je me een tip geven wat ik over het hoofd zie of juist helemaal niet goed doe?
 
M'n huidige plaatje gaat om dezelfde dame ;)

Ik zei dus een Globale variabele, dus eentje die je buiten de Sub declareert, die van jouw staat in de Sub zelf.
Dus buiten de Subs:
Public Afsluiten As Boolean

De waarde kan je dan zetten waar dat nodig is en ergens anders erop controleren.

Nog 1 keer voor jou dan ;)
avatar13291_6.gif.jpg
 
Laatst bewerkt:
Edmoor, bedoel je met de opmerking "buiten de Sub declareer" dat ik bv een nieuwe module creëer?
Dat heb ik overigens gedaan maar dan krijg ik vervolgens de melding dat er een dubbelzinnige naam "Afsluiten" is gevonden!

Dit heb ik dan in een nieuwe module gezet:
Code:
Option Explicit
Public Afsluiten As Boolean

Uiteraard heb ik de dim Afsluiten #3 verwijderd, het overige is ongewijzigd!

PS Bedankt voor het vertrouwde plaatje :thumb:
 
Als je hem eenmaal buiten een sub hebt gedeclareerd mag je hem uiteraard nergens anders meer declareren omdat je die dan gewoon in iedere Sub en Function al kan gebruiken. Het declareren ervan mag ook in een bestaande module. Het is dus niet nodig er speciaal een nieuwe module voor te gebruiken.
 
Laatst bewerkt:
Edmoor ik raak de weg volledig kwijt omdat de melding blijft komen dat er een dubbelzinnige naam is. Maar dat is zeker niet het geval.

Kan het met het volgende te maken hebben dat dat elkaar "bijt?

Code:
Option Explicit
Public NextTime As Date
Public EndTime As Date
Public Afsluiten As Boolean

Of...

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If EndTime Then
        Application.OnTime _
        EarliestTime:=EndTime, _
        Procedure:="CloseWB", _
        Schedule:=False
        EndTime = Empty
        Afsluiten , False
    End If
End Sub
 
Plaats je document eens, dan zijn we snel genoeg achter de oorzaak.
 
die optie heb ik ook al bedacht maar het document waarin ik werk heeft veel gevoelige informatie en veel verwijzingen in tabbladen enzo. Ik zal dan eerst een soort van "simulatie"moeten maken.
 
Edmoor in het wb staat een regel waarin staat dat 5 sec voor het afsluiten dat de "waarschuwingstekst" actief moet worden om de gebruiker te attenderen dat het programma wordt afgesloten.

Code:
WarningTime = EndTime - TimeValue("00:00:05")

ook deze heb ik geprobeerd om een False mee te geven onder "Afsluiten".
maar dit is geen "applicatie.Ontime" functie waardoor ik dat niet kan instellen.
Is daar een een andere manier voor?

ps bij het samenstellen van een "nieuw" document krijg ik ook steeds de foutmelding van een dubbelzinnige naam terwijl deze slechts een x voorkomt.
 
Maak gewoon een voorbeeld documentje met het benodigde erin en zonder de prive informatie. Plaats dat documentje hier, ook als je er foutmeldingen op krijgt. Dan kan ik het makkelijkst aangaven waar je in de fout bent gegaan.
 
Zie hier Edmond, ik hoop dat het allemaal duidelijk is zo. Daar waar het "stuk" loopt heb ik uitgeschakeld. De tijd start in cel n1 en heb ik nu op 1 minuut staan.
Wanneer je op de commandobutton klikt, wordt een venster geopend waar om het wachtwoord wordt gevraagd. Wanneer je Ilse invult stopt het aftellen.
Echter komt aan het einde de warningmessage in beeld met de mededeling dat het programma nu wordt afgesloten. Deze melding moet niet meer verschijnen wanneer de tijd onderbroken wordt met het wachtwoord.

Ik kijk uit naar je reactie

CooS
 

Bijlagen

  • Forum.xlsb
    27,7 KB · Weergaven: 40
Ik heb me niet echt verdiept in de werking, maar probeer deze eens:
Bekijk bijlage Forum.xlsb

De oorzaak van de fout was dat je een globale variabele met de naam Afsluiten had en tevens een routine met dezelfde naam.
Dat mag niet.
 
edmoor, heb je dit zelf ook getest? want bij mij blijft de pop-up gewoon komen!?
 
Leg eens stap voor stap uit wat de bedoeling is van dat document, wat ik dus moet doen om je probleem te reproduceren.
Wat ik voor je hebt gedaan is onderzocht waar je fout vandaa kwam en dat heb ik verholpen.

En hier bijvoorbeeld:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If EndTime Then
        Application.OnTime _
        EarliestTime:=EndTime, _
        Procedure:="CloseWB", _
        Schedule:=False
        EndTime = Empty
    End If
End Sub

Controleer je EndTime op True of False terwijl het een Date is en niet een Boolean.
 
Laatst bewerkt:
Goed dat je dat aangeeft Edmoor.
Het document wat ik hier naboots, is een document waar meerdere personen kunnen inloggen (niet tegelijk) en zich in een netwerk bevindt.
Om te voorkomen dat het vergeten wordt om het document af te sluiten (waardoor er niet meer door anderen in kan worden gewerkt), heb ik bedacht om het na enige tijd, automatisch af te laten sluiten.
Tot zover werkt dat ook.

Maar omdat er ook wel eens onderhoud moet worden uitgevoerd aan het programma, wil ik dus dat de gestarte tijd gestopt kan worden.
En omdat ik dat onderhoud niet altijd zelf doe (anders zou ik wel de tijd uitzetten in de vba-code) heb ik daar een button voor gemaakt waarmee dmv een wachtwoord de tijd stop gezet kan worden.
Ook dat werkt deels. (zie cel N1)

En wat dus niet werkt, en waar ik dus deze quote over gestart ben, is dat de warningmessage (aan het einde van de ingestelde tijd) wat zich in de formulieren bevindt, zich blijft aanmelden.
En dat, moet dus niet meer worden weergegeven of worden opgestart.

Ik hoop dat dit duidelijker is. Anders hoor ik je graag.
 

Bijlagen

  • Forum_2.xlsb
    32,4 KB · Weergaven: 38
Zoals ik al zei. Declareer die globale variabele met de naam Sluiten. Zet deze op True als het bericht niet meer hoeft te worden gegeven, dus in de routine waarin je dat moet doen.
In de routine die het bericht zou tonen doe je dan:
Code:
If Not Sluiten Then
    Toon bericht
End If
 
Bedankt voor je hulp Edmoor, maar ik kom er niet uit. Ik ga kijken of ik hier wel mee door moet gaan.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan