Hoe kan ik een Timer laten doorlopen terwijl een msgbox openstaat

Status
Niet open voor verdere reacties.

Velpon

Gebruiker
Lid geworden
20 aug 2020
Berichten
84
Geacht forum,

In mijn Excel gebruik ik een CountdownTimer.
Terwijl die loopt is er regelmatig manuele interventie nodig via een msgbox. De tijd dat de msgbox openstaat, gaat de timer in pauze.
Weet iemand hoe ik die timer kan laten doorlopen?

Code:
Private Sub CountDownTimer()

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

    If Range("CountDownTimer_1").Value = 0 Then
        Call GameOver
        Exit Sub
    
    End If
    
    Range("CountDownTimer_1") = Range("CountDownTimer_1") - TimeValue("00:00:01")

    Application.OnTime interval, "CountDownTimer1"

End Sub
 
Laatst bewerkt door een moderator:
Dat modeless userform ziet er spectaculair uit, maar gaat mij echt boven mijn pet.
Ik heb dus mijn Excel maar bijgevoegd.
 

Bijlagen

  • Game 31.xlsm
    131,2 KB · Weergaven: 46
Laatst bewerkt:
Waar is dit goed voor ?
Pas je ambities aan aan je VBA-vaardigheden.
 
Ik snap er niets van het overweldigende bestand.

Hier hoe het ook kan
Je kan wanneer de msgbox opengaat de systeemtijd in een variabele zetten, en stop je de countdowntimer.
Wanneer de msgbox weer dichtgaat kijk je naar het verschil tussen de systeemtijd en de variabele.
Dit verschil corrigeer je met de countdowntimer en start je de countdowntimer

Nadeel, wanneer een msgbox of een userform openstaat loop de countdowntimer niet.

Excel werkt opdrachten achter elkaar af, niet naast elkaar.
 
De timer loopt gelukkig wel door bij een msgbox of andere modale activiteit (een cel bewerken, het excel window verslepen, etc). Maar in zo'n situatie krijgt Excel geen gelegenheid meer om je scherm bij te werken, en dan lijkt het alsof je timer pauzeert. Als je je timer anders opzet gaat het een stuk beter.
Leuke toepassing!
 

Bijlagen

  • CountDownTimer.xlsm
    17,6 KB · Weergaven: 29
Dank voor de hulp. Excuus voor de late reactie. Even andere prioriteiten.

Met de oplossing van Frans werkt het prima.
Nog één klein dingetje: Hoe krijg ik de "COUNTDOWN_TIME" gekoppeld aan cel "GameTimeMax"?
Ik krijg de foutmelding: Compileerfout: Expressie voor constante vereist



Option Explicit

Private Const CALLBACK_PROC As String = "CountDownTimerProject.MOnTime.OnTimeUpdate"
Private Const COUNTDOWN_TIME As String = "GameTimeMax"
Private Const REFRESH_AFTER As String = "00:00:01"

Private CountdownStart As Double
Private NextTime As Double

Public Sub StartTimer()
CountdownStart = Now()
Call OnTimeUpdate
End Sub

Public Sub StopTimer()
On Error Resume Next
Application.OnTime NextTime, CALLBACK_PROC, Schedule:=False
End Sub

Private Sub StartNextTimer()
NextTime = Now() + TimeValue(REFRESH_AFTER)
Application.OnTime NextTime, CALLBACK_PROC, Schedule:=True
End Sub

Private Sub OnTimeUpdate()
Dim NewTime As Double
NewTime = TimeValue(COUNTDOWN_TIME) - (Now() - CountdownStart)
If NewTime > 0 Then
Sheet1.Cells(1).Value = NewTime
Call StartNextTimer
Else
Sheet1.Cells(1).Value = "Timer stopped."
Call StopTimer
End If
End Sub
 
Een constante variabel willen maken klinkt als een tegenspraak.
Verwijder de constante en voeg de regel toe:
Code:
Private CountdownTime As Double
Die geef je de juiste waarde in StartTimer.
Ook in OnTimeUpdate moet je wat aanpassen:
Code:
NewTime = CountdownTime - (Now() - CountdownStart)
En daarna weer goed testen.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan