Har ett gäng med textfält som det matas in tid i. Textfälten är indelade parvis och tidsskillnaden räknas ut mellan starttiden och sluttiden Jag skulle gjort på följande sätt: Tack! Med lite modifieringar så passade det utmärkt fast nu har jag kört fast igen... :( Nu gissar jag lite. Men är det så att du har använt tidigare funktion för att summera dessa värden till txtSumma? Att det då T.Ex innehåller 25:00? Run-time Error '13': Du har inte svarat på frågerna jag stälde i mit inlägg. Tänk på att jag är nybörjare :), sträng, tror jag Andreas Hillqvist, naturligtvis så funkade din lösning, det var skit bakom spakarna här.Problem med tid
Dim timeOne As Date
Dim timeTwo As Date
'o.s.v.
If txtScheMSP1.Text > txtScheMEP1 Then
timeOne = TimeSerial(0, (DateDiff("n", txtScheMSP1.Text, txtScheMEP1.Text) + 1440), 0)
Else
timeOne = TimeSerial(0, (DateDiff("n", txtScheMEP1.Text, txtScheMSP1.Text)), 0)
End If
If txtScheTuSP1.Text > txtScheTuEP1 Then
timeTwo = TimeSerial(0, (DateDiff("n", txtScheTuSP1.Text, txtScheTuEP1.Text) + 1440), 0)
Else
timeTwo = TimeSerial(0, (DateDiff("n", txtScheTuEP1.Text, txtScheTuSP1.Text)), 0)
End If
'o.s.v.
Nu vill jag lägga ihop tiderna
txtSummaTid.Text = timeOne + timeTwo 'o.s.v.
Inga problem så länge tiden är under 23h 59m, blir tiden 24h så får jag 1899-12-29 i txtSummaTid.
Testade med
txtSummaTid.Text = Format(timeOne + timeTwo + o.s.v, "Hh:Nn:Ss")
Då får jag 01:00:00 när det är 25h.
Hur skall jag göra för att få det att bara visa timmar, minuter och ev. sekunder (sekunder är inte nödvändigt)Sv: Problem med tid
<code>
Public Function ValidateTime(Value As String) As Boolean
If IsDate(Value) Then
Select Case CDate(Value)
Case 0 To 1
ValidateTime = True
End Select
End If
End Function
Public Function TimeDiff(Value1 As Date, Value2 As Date) As Date
If Value1 > Value2 Then
TimeDiff = Value1 - Value2 + 1
Else
TimeDiff = Value2 - Value1
End If
End Function
Private Sub Command1_Click()
Dim Total As Date
Dim strMSG As String
If Not ValidateTime(txtScheMSP1) Then
strMSG = strMSG & "ScheMSP1" & vbCrLf
End If
If Not ValidateTime(txtScheMEP1) Then
strMSG = strMSG & "ScheMEP1" & vbCrLf
End If
If Not ValidateTime(txtScheTuSP1) Then
strMSG = strMSG & "ScheTuSP1" & vbCrLf
End If
If Not ValidateTime(txtScheTuEP1) Then
strMSG = strMSG & "ScheTuEP1" & vbCrLf
End If
If Len(strMSG) > 0 Then
MsgBox "Du har inte angivit giltligt värde i:" & vbCrLf & strMSG, vbExclamation
Else
Total = TimeDiff(txtScheMSP1.Text, txtScheMEP1.Text)
Total = Total + TimeDiff(txtScheTuSP1.Text, txtScheTuEP1)
MsgBox Int(Total * 24) & ":" & Right("00" & Minute(Total), 2) & ":" & Right("00" & Second(Total), 2)
End If
End Sub
</code>
Det kanske kan var till någon hjälp?Sv: Problem med tid
Skall begrunda koden och se om jag kan förstå och få det att funka... :)Sv: Problem med tid
Istället för att skriva till en msgBox så skriver jag till ett textfält
txtSummaP1 Int(Total * 24) & ":" & Right("00" & Minute(Total), 2) & ":" & Right("00" & Second(Total), 2)
Har 6 st. fält, txtSummaP1, txtSummaP2....txtSummaP6
Nu skall dessa 6 fält summeras och det är där det går åt pipan.
Tycker inte att det borde vara någon skillnad på koden nedan och den ovan men funkar gör det i alla fall inte
Private Sub txtTotPer_Click()
'On Error GoTo ErrorHandler
Dim totP1 As Date, totP2 As Date, totP3 As Date, totP4 As Date, totP5 As Date, totP6 As Date
totP1 = txtSummaP1
totP2 = txtSummaP2
totP3 = txtSummaP3
totP4 = txtSummaP4
totP5 = txtSummaP5
totP6 = txtSummaP6
TotalTid = totP1 + totP2 + totP3 + totP4 + totP5 + totP6
txtTotPer.Text = Int(TotalTid * 24) & ":" & Right("00" & Minute(TotalTid), 2)
ErrorHandler:
If (Err.Number = 13) Then
MsgBox "Fel inmatning i något textfält"
End If
End Sub
När tiden blir över 24h så får jag felmeddelande :(
Hur gör jag?Sv: Problem med tid
Efter som detta inte är en giltlig tidsangivelse kan du inte lagra det i ett datum variabel.
Har gjort en funktion för dig:
<code>
Function ToDate(Value As String) As Date
Dim Data() As String
Data = Split(Value, ":", 2)
ToDate = TimeSerial(Data(0), Data(1), 0)
End Function
Private Sub txtTotPer_Click()
'On Error GoTo ErrorHandler
Dim TotalTid As Date
TotalTid = ToDate(txtSummaP1)
TotalTid = TotalTid + ToDate(txtSummaP2)
TotalTid = TotalTid + ToDate(txtSummaP3)
TotalTid = TotalTid + ToDate(txtSummaP4)
TotalTid = TotalTid + ToDate(txtSummaP5)
TotalTid = TotalTid + ToDate(txtSummaP6)
txtTotPer.Text = Int(TotalTid * 24) & ":" & Right("00" & Minute(TotalTid), 2)
ErrorHandler:
If (Err.Number = 13) Then
MsgBox "Fel inmatning i något textfält"
End If
End Sub
</code>
Det är bättre att hindra fel från att uppstå med en kontroll. Än att fånga felet. Eftersom du då har mer kontroll. Sv: Problem med tid
Type mismatch
på raden
ToDate = TimeSerial(Data(0), Data(1), 0)
?????Sv: Problem med tid
Vad är txtSummaP1, txtSummaP2, osv? Vilket format har de? Sv: Problem med tid
txtSummaP5.Text = Int(Total * 24) & ":" & Right("00" & Minute(Total), 2)Sv: Problem med tid
Hade ett textfält där det var ifyllt 00:00:00 och då gick det åt pipan.
Tack för hjälpen! :o)