Langsam werde ich verrückt. Ich habe in VBA eine Form erzeugt, die u.a. 3 Textboxen enthält, die Speed, Distance und Duration repräsentieren. Die Speed und Distance Boxen lesen sich Werte aus einem Sheet aus. Die Duration wird berechnet. Implementiert ist die Formel duration = distance / speed (Code siehe weiter unten). Bei mir läuft es überall bestens, auf manchen Rechnern berechnet er aber falsche Werte.
Ich habe das gesamte Programm in Excel 2003 entwickelt auf einer dt. Version von Windows XP Home. Wenn ich das Programm jetzt unter (vorwiegend) älteren und engl. Windows Versionen laufen lasse, berechnet mir VBA den Duration Wert MANCHMAL falsch. Sprich der Code funktioniert nicht korrekt. Excel bzw. VBA ignoriert das Komma einfach. Wenn ich in der Form die Werte raus lösche und neu eingebe, rechnet er auf einmal richtig. Er kommt also mit den aus dem Sheet gleesenen Werten nicht zurecht scheinbar. Das witzige ist: in einem 2000er Windows funktioniert es wieder, in einem anderen nicht. Woran kann das liegen?
Ich hab schon gedacht, dass es ggf. am Zahlenformat liegt. In Excel (zumindest im 2003er) kann man bei "Extras > Optionen > Internationale Einstellungen" die für gewöhnlich auf die Sprache des Betriebssystems eingestellte Kommasetzung umstellen. Bei Excel 2000 geht das z.B. wiederum nicht. Auf einem PC mit Excel 2002 war diese Umstellung die Lösung des Problems, also hat es doch was damit zu tun?
Ich verstehe sowieso nicht, warum das überhaupt ein Problem sein kann, ob Punkt oder Beistrich für Komma eingestellt ist. In VBA müßte dies doch egal sein. Oder hängt das schon mit den ausgelesenen Werten zusammen?
Source-Code:
Private Sub tbSpeed_Change()
If ((tbSpeed.value = "") Or (tbDistance.value = "") Or (tbSpeed.value <= 0) Or (tbDistance.value <= 0)) Then Exit Sub
If (changeSettings = True) Then
tbDuration.value = Round(tbDistance.value / tbSpeed.value, 2)
End If
End Sub
Private Sub tbDistance_Change()
If ((tbDistance.value = "") Or (tbSpeed.value = "") Or (tbDistance.value <= 0) Or (tbSpeed.value <= 0)) Then Exit Sub
If (changeSettings = True) Then
tbDuration.value = Round(tbDistance.value / tbSpeed.value, 2)
End If
End Sub
Private Sub tbDuration_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal y As Single)
'if time is entered, distance and speed are not interesting any longer
tbSpeed.value = ""
tbDistance.value = ""
End Sub
Private Sub tbDuration_Change()
'set durations of all runs to new value
bResetAllDurations_Click
End Sub
Vielen Dank für eure Hilfe...