Hej! Hej Jan! Hej Hej Varför komplicera det? Hej igen! Hej Ursäkta MEN jag har provat MEN får det inte att fungera, CSng(CDate(Time)) blir alltid > Sluttid, Okej, Här är ett exempel som funkar på det sättet. Tar det som en förolämnpning? :O) Hej :-) Tja, du har väl rätt. Hej igenTimer
Jag skall göra en Timer som slår på en viss tid och slår av en annan tid.
Och har lite problem, att starta är inga problem MEN när jag skall kolla tiden den skall slå av, om den tiden är efter midnatt har jag inte kommit på hur man gör, den tiden är ju helt plötsligt lägre än när timen startade. Är det någon som har ett ex. på hur man gör?
/JanSv: Timer
Funderar på ditt problem. Kan detta hjälpa dig:
'räkna först om alla tider till tex minuter.
'beräkna sedan hur lång tid du har hållit på
if timeNow > timeStart then
gångenTid = timeNow - timeStart
else
gångenTid = timeMidnight - timeStart + timeNow
'kolla om det är dax att sluta
if gångenTid > timeToRun then
avbryt aktivitet
/GoranSv: Timer
Princip resonemang.
Du lägger in starttid i en Global eller Static variabel
tex. från functionen Timer som visar sekunder
förluppit sedan midnatt.
Sedan checkar du med en If sats om starttid > förluppen tid
mot samma Timer function.Om detta blir True ökar du starttid med
24 timmar dvs om du mäter i sekunder 86400
ungefär så kom igen om du behöver mer hjälp
mvh
SvenSv: Timer
Option Explicit
Dim Starttid As Single
Dim Körtid As Single
Dim Sluttid As Single
'Exempel du startar 22:30
'Du vill ha larm efter 3 timmar
'dvs 01:30.Det finns två sätt att se på
'detta antinge skall användaren skriva
'in 01:30:00 eller 3:00:00
Private Sub Command1_Click()
'Fall nr 1 blir enkelt
Timer1.Enabled = True 'Interval 30000 (30 sek)
Sluttid = CDate("01:30:00") 'CDate(Text1)
End Sub
Private Sub Command2_Click()
'Fall nr 2 förmodligen det du är intresserad av
'Interval bör vara 30000 (30 sek)
Starttid = CDate("22:30:00") 'Cdate(Time)
Timer1.Enabled = True
'viktigt Text1 innehåller formatet 3:00:00
Körtid = CDate(Text1)
Sluttid = Starttid + Körtid
If Sluttid > 1 Then _
Sluttid = Sluttid - 0.99999
End Sub
Private Sub Timer1_Timer()
'Interval bör vara 30000 (30 sek)
If CSng(CDate(Time)) > Sluttid Then
Timer1.Enabled = False
MsgBox ("LarmTid " & Format$(Time, "hh:mm:ss"))
End If
End Sub
Mvh
SvenSv: Timer
Härr är ett enkel exempel på en lösning på problemet... :O)
* Skapa ett formulär
* Lägg till en Timer kontrol
* Ange ett intervall för timern, typ 1000(Kör en kontroll varje minut)
* Klistra in koden nedan i Form1:
Public State As Boolean
Public NextTime As Data
Private Sub Timer1_Timer()
If Now > NextTime Then
If State Then
TurnOff
State = False
Else
TurnOn
State = False
End If
NextTime = DateAdd("m", 30, Now)
End If
End Sub
Public Sub TurnOff()
MsgBox "Turn Off"
End Sub
Public Sub TurnOn()
MsgBox "Turn On"
End SubSv: Timer
Jag får inte detta att fungera i mitt fall.
Jag vill ha det så att ena dagen skall den starta ex. 15:00 och stänga av sig 20:00, nästa dag eller gång skall den ex. starta 21:30 och stänga ner 01:00. Dessa tider är fördefinierade.
/JanSv: Timer
Varför komplicera det?
Härr är ett enkel exempel på en lösning på problemet... :O)
Avdelning kvalificerat "bull"
SvenSv: Timer
vad jag än skriver Text1, skall Text1 vara antal timmar den skall gå eller är det Klockslag, jag skriver som du sa ex. 01:00:00?
:( JanSv: Timer
Orkade inte skapa en databas, svårt att visa den i forumet också...
Klistra in i ett formulär med en timer, intervall 1000:
Private Type TimeEntry
Start As Date
Stop As Date
Intervall As String
Value As Integer
End Type
Private mTimeEntry() As TimeEntry
Private mState As Boolean
Private Sub Form_Load()
ReDim mTimeEntry(1 To 2)
With mTimeEntry(1)
.Start = Date + #3:00:00 PM#
.Stop = Date + #8:00:00 PM#
.Intervall = "d"
.Value = 1
End With
With mTimeEntry(2)
.Start = Date + #9:30:00 PM#
.Stop = Date + #12/31/1899 1:00:00 AM#
.Intervall = "d"
.Value = 1
End With
End Sub
Private Sub Timer1_Timer()
Dim Index As Integer
Dim Found As Boolean
For Index = LBound(mTimeEntry) To UBound(mTimeEntry)
With mTimeEntry(Index)
If .Value > 0 Then
Do While .Stop < Now
.Start = DateAdd(.Intervall, .Value, .Start)
.Stop = DateAdd(.Intervall, .Value, .Stop)
Loop
End If
Select Case Now()
Case .Start To .Stop
Found = True
Exit For
End Select
End With
Next
If Found Then
State = True
Else
State = False
End If
End Sub
Private Property Let State(vData As Boolean)
If mState <> vData Then
If vData Then
TurnOn
mState = True
Else
TurnOff
mState = False
End If
End If
End Property
Private Property Get State() As Boolean
State = mState
End Property
Public Sub TurnOff()
MsgBox "Turn Off"
End Sub
Public Sub TurnOn()
MsgBox "Turn On"
End SubSv: Timer
Men lite "skit" får man väl allt ta...
Tycker bara det är lättare att använda komplet tidsangivelse med datum som man updaterar när de förfallit.
Kan då skapa perioder som sträcker sig över mer än ett dygn, och slipper oroa sig för tolvslaget. Finns ju trots allt inga spöken, eller?
Men du är underbar ändå... :O)Sv: Timer
Tar det som en förolämnpning? :O)
Men lite "skit" får man väl allt ta...
No hard fellings men eftersom du nämnde att
krångla till det så var jag tvungen att kolla vad
du skrev.Det blev en hel del onödig "coderader"
för detta enkla problem. Om man läser frågan
så gällde det bara inom en 24 timmars period.
Okidoki
Ha det
mvh
SvenSv: Timer
Jag ser inte att frågeställaren har specat det till 24 timmars period, eller kanske bara missat det.
Men det kanske händer att förutsättningarna förändras.
Är det inte bättre att då gjort en lösning som kostat några få rader kod mer, men som hanterar det. Istället för att koda om den då?
Hur komplicerad en kod är, kan man likställa det med antal rader?
P.S.
Jag måste alltid ha rätt... Jag är envis som en åsna... :O)
Dessutom så för vi ju en diskussion, är ju det ett forum är till för...Sv: Timer
>Jag måste alltid ha rätt... Jag är envis som en åsna... :O)
>Dessutom så för vi ju en diskussion, är ju det ett forum är till för...
Okidoki
Det är en bra egenskap om man skall hålla
på med programmering. Jag är lika dan på gott och ont.
Slut på denna tråd
Ha det
Sven