Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
528to532
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
528to532
528to532
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

VBA Form: Komma in engl. OS als Punkt eingelesen

VBA Form: Komma in engl. OS als Punkt eingelesen
07.12.2004 13:51:05
Manfred
BITTE HELFT MIR, bin schon am Verzweifeln.
Habe in meinem deutschen Windows XP ein Excel Programm entwickelt, das mit Forms arbeitet. In diesen Forms habe ich zahlreiche Textboxen, die Werte aus dem Excel-Sheet lesen und damit Berechnungen durchführen. Soweit alles bestens.
Wenn ich das Programm nun auf englischen Betriebssystemen laufen lasse, wird beim Einlesen von Werten aus dem Excel-Sheet hinein in die Textboxen DAS KOMMA einfach AUTOMATISCH IN EINEN PUNKT umgewandelt. Rechnen tut Excel aber (scheinbar/offensichtlich) dennoch mit Komma, daher kommen falsche Werte Raus.
Warum konvertiert Excel die Zahlen in engl. Format, rechnet aber dann in Komma weiter ?
Beispiel:
=========
Konkret hab ich 2 Werte im Sheet (Speed, Distance). Diese lese ich jetzt in Textboxen der Form ein und will daraus die Duration berechnen und in eine 3te Textbox der Form schreiben. Wenn im Sheet z.B. die Werte 2,3 und 11,5 stehen, stehen in der Form dann die Werte 2.3 und 11.5. Bei der Berechnung ignoriert Excel jetzt den Punkt und rechnet mit 23 und 115 - argh!
Source:
=======
tbDistance.value = cells(row1, col1).value
tbSpeed.value = cells(row1, col2).value
tbDuration.value = tbDistance.value / tbSpeed.value
Ich hab auch schon probiert, das ganze in Double Werte umzuwandeln, aber es ändert nichts. Die einzige Lösung bisher war, die Zelleninhalte ALS TEXT EINZULESEN, aber das ist doch auch keine Lösung, da es dann wieder zu Problemen kommt, wenn in Excel-Sheet Punkt-Werte stehen :-(
Woran kann das liegen? Was soll ich machen?
Vielen Dank, Manfred.

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Form: Komma in engl. OS als Punkt eingelesen
Udo
tbDistance = cells(row1, col1)
tbSpeed = cells(row1, col2)
tbDuration = cells(row1, col1)/ cells(row1, col2)
Udo
AW: VBA Form: Komma in engl. OS als Punkt eingelesen
07.12.2004 14:10:27
Manfred
Hallo
Doch, VBA rechnet falsch, obwohl ich nirgends das Komma hard-codiere. Bei der Berechnung der Duration geht nur um diese 2 Textboxen (Speed und Distance) und hierin stehen die von VBA in Punkt-Darstellung konvertierte Werte.
@Udo:
So einfach ist das nicht, ich kann für die Berechnung von Duration nicht die Zell-Referenzen verwenden, da man ja die Werte Speed und Distance in den Textboxen auch modifizieren kann und dann mittels der Change-Funktion Duration neu berechnet werden soll.
Genau hier rechnet VBA aber dann einfach als wären die Punkte nicht hier. Wenn ich in die Textboxen Werte mit Kommas eingebe, kommt auf einmal eine richtige Duration raus!!
?
Anzeige
AW: VBA Form: Komma in engl. OS als Punkt eingelesen
07.12.2004 14:53:03
Frank
Also noch einmal:
- du hast die Werte initial in einer Zelle
- du liest diese dann in eine Form ein
In einer englischen Version sollte dann folgendes passieren:
- die vorherigen Kommawerte werden mit einem Punkt in der Form dargestellt.
- Der User muss Dezimalzahlen auch mit Punkt als Trennsymbol eingeben.
Evtl. poste doch mal etwas mehr von Deinem code (Einlese + ausleseroutinen)
AW: VBA Form: Komma in engl. OS als Punkt eingelesen
07.12.2004 16:07:41
Manfred
@Frank
1. Ich habe ein Excel Sheet mit Zahlwerten, die Nachkommastellen haben (können) und das Komma ist überall als Beistrich (nicht Punkt wie im Englischen) formatiert in den Zellen.
2. In einer Form lese ich mir diese Werte dann rein. Dann steht in der Form überall derselbe Wert wie im Sheet nur mit einem Punkt statt einem Komma (nur in engl. OS).
3. Wenn ich jetzt einen der 2 Werte (speed oder distance) in der Form ändere, soll in einer 3ten Textbox in der Form der korrekte Wert stehen. Tut es aber nicht, da Excel/VBA mit den 2 Werten (speed/distance) in den Textboxen umgeht, als wären es ganzzahlen, also den Komma-Punkt völlig ignoriert). Ich habe mir die Werte in den Textboxen auch schon ein paarmal ausgeben lassen, aber der Punkt wird IMMER IGNORIERT. Das heißt für mich, dass ich mit den Werten in den Textboxen nicht mehr arbeiten kann.
Anm.:
Wenn ich in den 2 Textboxen jetzt statt dem Punkt einen Beistrich schreibe bei den Werten, stimmt die Berechnung auf einmal. Das Ergebnis wird aber dennoch in Punkt-Form angezeigt - total verwirrend. (scheinbar rechnet excel nur mit beistrich-kommas korrekt, stellt alle Werte aber in Punkt-Form dar).
WAS SOLL DAS? Was ist hier los?
Vielen Dank!
Anzeige
AW: VBA Form: Komma in engl. OS als Punkt eingelesen
07.12.2004 16:36:52
Frank
Hi
versuche mal den Inhalt Deiner Textboxen vorher mit CDbl zu konvertieren. Also
CDbl(textbox1.value)
und nutze diesen Wert
AW: VBA Form: Komma in engl. OS als Punkt eingelesen
07.12.2004 17:27:00
Manfred
Habe ich schon alles probiert, aber Excel/VBA ignoriert einfach die Punkte-Komma :-(
Es ist einfach nicht möglich, mit den Werten aus den Textboxen einen korrekten Wert zu berechnen, weil er das Punkt-Komma immer als NICHTS interpretiert.
Wo kann der Fehler liegen? Hab wirklich schon alles probiert
tbDuration = ...
tbDuration.text = ...
tbDuration.value = ...
und für die rechte Seite:
...= tbDistance / tbSpeed
...= tbDistance.value / ...
...= CDbl(tbDistance.value) / ...
usw.
ICH WERD VERRÜCKT!!!
BITTE HELFT MIR !
Anzeige
AW: VBA Form: Komma in engl. OS als Punkt eingelesen
07.12.2004 17:34:51
Frank
Hi
lade doch mal eine Datei mit dem gesamten code und Beispieldatensätzen hoch. Es ist sonst sehr schwierig an Hand Deiner Code Fragmente zu erkennen, wo der Fehler liegt
Es geht ansonsten grundsätzlich ohne Probleme (arbeite hier selber mit verschiedensten Excel Sprachversionen)
Frank
AW: VBA Form: Komma in engl. OS als Punkt eingelesen
07.12.2004 18:01:14
Manfred
Das ganze kann ich wegen copyright nicht raufstellen, aber hier die interessanten Fragmente:
'GETVALUES LÄDT DIE DATEN VOM SHEET IN DIE FORM

Private Sub getValues(position)
Dim speed As Double, distance As Double, duration As Double
speed = CDbl(Cells(position, Range("speed").Column).value)
distance = CDbl(Cells(position, Range("distance").Column).value)
duration = CDbl(Cells(position, Range("duration").Column).value)
tbSpeed.Value = Round(speed, 2)
tbDistance.Value = Round(distance, 2)
tbDuration.Value = Round(duration, 2)
End Sub

BEI ÄNDERUNG EINES WERTES (SPEED ODER DISTANCE) SOLL DURATION NEU BERECHNET WERDEN

Private Sub tbSpeed_Change()
If ((changeSettings = False) Or tbSpeed.Text = "" Or tbDistance.Text = "") Then Exit Sub
Dim distance As Double, speed As Double, duration As Double
distance = CDbl(tbDistance.value)
speed = CDbl(tbSpeed.value)
If ((distance <= 0) Or (speed <= 0)) Then Exit Sub
duration = CDbl(distance / speed)
tbDuration.value = Round(duration, 2)
End Sub


Private Sub tbDistance_Change()
If ((changeSettings = False) Or tbSpeed.Text = "" Or tbDistance.Text = "") Then Exit Sub
Dim distance As Double, speed As Double, duration As Double
distance = CDbl(tbDistance.value)
speed = CDbl(tbSpeed.value)
If ((distance <= 0) Or (speed <= 0)) Then Exit Sub
duration = CDbl(distance / speed)
tbDuration.value = Round(duration, 2)
End Sub

ICH HAB SCHON ZIEMLICH ALLE VARIANTEN DURCHPROBIERT, DIE OBIGE IST DIE LETZTE DAVON :-(
Vielen Dank für die Hilfe.
Manfred.
Anzeige
Das Problem auf den Punkt gebracht (reduziert)
08.12.2004 18:31:43
Manfred
HAllo Leute...
Ich habe das Problem mit der Punkt/Komma Kompatibilität bei engl. OS noch immer, aber jetzt konnte ich das Problem auf folgendes reduzieren:
Ein Berechnungsfehler tritt nur auf, wenn ich die Werte aus den Textfeldern der UserForm für die Berechnung verwende. Dort stehen diese in der engl. Form also mit Punkt als Komma drin und egal, ob ich den Wert (textbox123.value) direkt für eine Berechnung verwende oder ihn z.B. mit einer Funktion wie CDbl auf ein Double konvertiere: in allen Fällen ignoriert Excel/VBA den Punkt(also das Komme) und rechnet mit den Ziffern als Ganzzahl.
WARUM ?
Das witzige ist, dass er Zahlen aus Textboxen beim Zurückschreiben in das Excel Sheet wieder korrekt macht, d.h. einfach den Punkt in ein Komma umwandelt. Nur bei Berechnungen mit den Punkt-Werten in der Form spinnt er!
Bitte helft mir - DANKE!!!
Anzeige
AW: VBA Form: Komma in engl. OS als Punkt eingelesen
07.12.2004 13:56:44
Frank
Hi
innerhalb von VBA werden IMMER die Standard-US Einstellungen verwendet. D.h. es sollten dann auch keine falschen Werte kommen, wenn Du konsequent kein Komma hardcodierst.
Wo genau bekommst Du denn einen Fehler mit welchen Werten?
Frank
AW: VBA Form: Komma in engl. OS als Punkt eingelesen
07.12.2004 18:05:09
Frank
Hi Manfred
wie gesagt, stelle doch mal bitte eine Beispieldatei hier rein. Ansonsten sollte aber folgendes funktionieren:
tbDuration.value = CDBL(tbDistance.value) / CDbl(tbSpeed.value)
Frank

Anzeige
AW: VBA Form: Komma in engl. OS als Punkt eingelesen
07.12.2004 18:17:19
Manfred
Aus Copyright Gründen hier nur die relevanten Fragmente:
'DIESE METHODE LIEST DIE DATEIEN AUS DEM SHEET IN DIE TEXTBOXEN DER FORM EIN

Private Sub getValues(position)
Dim speed As Double, distance As Double, duration As Double
speed = CDbl(Cells(position, Range("speed").Column).value)
distance = CDbl(Cells(position, Range("distance").Column).value)
duration = CDbl(Cells(position, Range("duration").Column).value)
tbSpeed.Value = Round(speed, 2)
tbDistance.Value = Round(distance, 2)
tbDuration.Value = Round(duration, 2)
End Sub

'FOLGENDE METHODEN BERECHNEN DEN DURATION-WERT NEU, WENN SPEED ODER DISTANCE TEXTBOX-WERTE GEÄNDERT WERDEN

Private Sub tbSpeed_Change()
If ((changeSettings = False) Or tbSpeed.Text = "" Or tbDistance.Text = "") Then Exit Sub
Dim distance As Double, speed As Double, duration As Double
distance = CDbl(tbDistance.value)
speed = CDbl(tbSpeed.value)
If ((distance <= 0) Or (speed <= 0)) Then Exit Sub
duration = CDbl(distance / speed)
tbDuration.value = Round(duration, 2)
End Sub


Private Sub tbDistance_Change()
If ((changeSettings = False) Or tbSpeed.Text = "" Or tbDistance.Text = "") Then Exit Sub
Dim distance As Double, speed As Double, duration As Double
distance = CDbl(tbDistance.value)
speed = CDbl(tbSpeed.value)
If ((distance <= 0) Or (speed <= 0)) Then Exit Sub
duration = CDbl(distance / speed)
tbDuration.value = Round(duration, 2)
End Sub

Wie gesagt: ich hab schon ziemlich alle Varianten durchprobiert. Der obige Code ist somit der letzte Versuch gewesen.
Danke für die Hilfe.
Anzeige

311 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige