VB6: Rundenzeiten addieren

speedfreak1988

Cadet 3rd Year
Registriert
Jan. 2007
Beiträge
44
Hallo Leute!
Ich stehe vor einem kleinen Problem:

Ich möchte mit VB6 ein Programm erstellen, mit dem ich Rundenzeiten eingebe und diese addiert in einer TextBox oder in nem Label ausgegeben werden.

Beispiel:
Runde 1: "1:15,254"
Runde 2: "1:14,521"
*Klick auf Button*
Summe : "2:29,775"

Bei meinen Versuchen lag es glaub ich an der Formatierung der TextBoxen (DataFormat).

Hier mein Code:
Private Sub Command1_Click()
Text3.Text = CDbl(Text1.Text) + CDbl(Text2.Text)
End Sub


Hätte ich die Konvertierung nach Double (Cdbl) nicht gemacht, hätt er die Zeiten einfach aneinander geklatscht, wie z.B.: "1:15,2541:14,521".

Danke für eure Tipps!
Tom
 
Übrigens klappt es auch nicht, wenn ich nach Date (Cdate) konvertiere. :-(
 
Zeitangaben werden auch mit CDate deklariert :

Code:
start = CDate("4:35:09")

Ist nur ne Idee, hab das beim googlen gefunden.
 
ich weiß, aber bei mir funzt es leider noch nicht.
kan nes sein, dass man alle textboxen vorher mit "Format(Text1.Text, "m:ss.000")" irgendwie dingsen muss?

Hab das ganze bisher im Excel gemacht, aber ich hab mir gedacht, wenn schon, dann in ner Sprache.

Und da ich bisher nur VB und VBA beherrsche, mach ichs im VB.
 
So wie ich den Code bei dem Beispiel (Link) verstehe, muss man die Zeichenkette zwangsweise in die Bestandteile zerlegen und dann in Integer/Double oder sonstwas casten und dann addieren.

Dann das ergebnis wieder in einen String packen und auf deine Textbox knallen.
 
Ich hab dir mal was gecodet.
Die Konstanten R1 und R2 kannste dann mit deinen Textboxen ersetzen.
Ich hoffe du verstehst Arrays, denn darauf basiert mein Code.
Er splittet die Rundenzeit in einzelne Bestandteile (Minuten und Sekunden) und addiert diese einzeln.

Code:
Const Runde1 As String = "1:15,254"
Const Runde2 As String = "1:14,521"

Dim R1() As String
Dim R2() As String

R1 = Split(Runde1, ":") 'Die Rundenzeiten werden nach Minuten [R1(0)] und Sekunden [R1(1)] in einen Array aufgeteilt.
R2 = Split(Runde2, ":")

Dim SummeMinuten As Double
SummeMinuten = CDbl(R1(0)) + CDbl(R2(0)) 'Wir addieren die Minuten

Dim SummeSekunden As Double
SummeSekunden = CDbl(R2(1)) + CDbl(R2(1)) 'Wir addieren die Sekunden

Dim Summe As String
If SummeSekunden > 60 Then 'Fall die Sekunden groesser als 60 sind
    SummeMinuten = SummeMinuten + 1 'addieren wir eine Minute
    SummeSekunden = SummeSekunden - 60 'und ziehen 60 Sekunden ab.
End If

Summe = CStr(SummeMinuten) & ":" & CStr(SummeSekunden) 'Hier wird wieder alles in Strings umgewandelt, um es in der Textbox auszugeben.

MsgBox Summe
Msgbox Summe kannst du dann mit dem Textbox einlesen ersetzen.

Ich hoffe dir hilft der Code :)
 
Zuletzt bearbeitet:
ich weiß, was arrays sind, hab aber nicht soooo viel erfahrung.
ich versuch die dinger zu verstehn und das prog zum laufen zu kriegen.
 
Der Code selber an sich funktioniert ja, du musst nur die Konstanten R1 und R2 mit deinen Textboxen (wahrscheinlich Text1 und Text2 ersetzen). ^^
Und so lange du das Inputformat (min:sec,milisec) beibehaeltst, wirds auch funzen :)
 
wofür sind eigentlich die const-teile am anfang?

also:
Const Runde1 As String = "1:15,254"
Const Runde2 As String = "1:14,521"
 
Wie gesagt, ich hab mir jetz nich die Muehe gemacht, Textboxen zu nutzen, ich hab einfach deine Rundenzeiten genommen.
Loesch die Konstanten und ersetz sie mit deinen Textboxen

Dim Runde1 As String
Runde1 = Text1
Dim Runde2 As String
Runde2 = Text2


Vllt verstehst dus ja so besser :D
 
Dim m1, m2, s1, s2 As String
s1 = Mid(Text1.Text, Len(Text1.Text) - 5)
s2 = Mid(Text2.Text, Len(Text2.Text) - 5)
m1 = Mid(Text1.Text, 1, 1)
m2 = Mid(Text2.Text, 1, 1)

If CDbl(s1) + CDbl(s2) > 60 Then
Text3.Text = CDbl(m1) + CDbl(m2) + 1 & ":" & CDbl(s1) + CDbl(s2) - 60
Else
Text3.Text = CDbl(m1) + CDbl(m2) & ":" & CDbl(s1) + CDbl(s2)
End If
 
Hm sehr schoen kommentiert :freak:

Achja und dein Code hat ein Problem ^^ Wenn die Minute groesser als 10 ist (also Length = 2) liest dein Mid trotzdem nur die erste Stelle.
Genauso bei den Sekunden.

Es soll ja dynamisch funktionieren.
 
komischerweise kommt bei deinem code immer 2:29,042 raus.

da kann ich runden fahren wie ich will*grübel*
 
@Julexander: Ist ja auch nur ne Gedankenanregung. Man kann ja die Minute ebenfalls mit Split auslesen, mein Beispiel war halt nur ne Alternative. Kann den Code auch nicht testen, sitz gerade im Zug und hab hier keinen Compiler.

@Speed: Kann nicht sein.
 
@Julex: Du hast übrigens den gleichen Fehler wie ich auch ( >60 Prüfung: Korrekt ist hier 59)

Hier meine Korrektur:



Dim m1, m2, s1, s2 As String
s1 = Mid(Text1.Text, Len(Text1.Text) - 5): s2 = Mid(Text2.Text, Len(Text2.Text) - 5)
m1 = Mid(Text1.Text, 1, 1): m2 = Mid(Text2.Text, 1, 1)

If CDbl(s1) + CDbl(s2) > 59 Then Text3.Text = CDbl(m1) + CDbl(m2) + 1 & ":" & CDbl(s1) + CDbl(s2) - 60
If CDbl(s1) + CDbl(s2) < 60 Then Text3.Text = CDbl(m1) + CDbl(m2) & ":" & CDbl(s1) + CDbl(s2)
 
@Julex: Du hast noch einen Fehler in deinem Code:
SummeSekunden = CDbl(R2(1)) + CDbl(R2(1)) 'Wir addieren die Sekunden

Zweimal R2?

Wenn man deinen Code verwendet müsste 2:29,042 anstelle von 2:29,775 rauskommen :freak::freak::freak::freak::evillol:
:king:
 

Ähnliche Themen

Antworten
262
Aufrufe
46.175
60 61 62
Antworten
1.236
Aufrufe
142.583
Zurück
Oben