Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1380to1384
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
Textbox mit 1000er-Trennzeichen - Ausgabefehler
05.09.2014 10:25:18
Florian
Hallo zusammen,
ich habe eine Userform, die mehrere TextBoxen enthält, in die Zahlen eingegeben werden. Zu besseren Lesbarkeit wurde von den Nutzern ein 1000er-Trennzeichen gewünscht. Soweit so gut. Nun ist es aber so, dass sich die Ausgabewerte der TextBoxen unterschiedlich verhalten, obwohl der Code der TextBoxen und auch die Variablendeklaration gleich ist.
Beispiel:

Private Sub textbox4_afterupdate()
TextBox4 = Format(TextBox4, "#,###")
If IsNumeric(TextBox4.Value) = True Then
bestMenge = TextBox4.Value
Else
bestMenge = ""
MsgBox "keine gültige Zahl!"
TextBox4.SetFocus
End If
End Sub
Private Sub textbox6_afterupdate()
TextBox6 = Format(TextBox6, "#,###")
If IsNumeric(TextBox6.Value) = True Then
FertigungsMenge = TextBox6.Value
Else
FertigungsMenge = ""
MsgBox "keine gültige Zahl!"
TextBox6.SetFocus
End If
End Sub

Wenn nun in TextBox4 und TextBox6 Werte größer 1000 eingegeben werden, dann erscheinen die auch mit Trennpunkt. Wenn ich jetzt aber die Werte aus Textbox4 in die Zelle A1 schreibe und die Werte aus TextBox6 in die Zelle B1 schreibe passiert folgendes:
TextBox4 = 10.000 => A1 = 10
TextBox6 = 10.000 => B1 = 10000
Woran liegt es denn, dass Excel aus zwei gleichen Eingaben verschiedene Ausgaben macht? Und noch viel wichtiger: wie kann ich das in den Griff bekommen?
Danke schon mal fürs Lesen und für eure Hilfe
Florian

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Textbox mit 1000er-Trennzeichen - Ausgabefehler
05.09.2014 10:38:56
Hajo_zi
Hallo Florian,
Du hast den falschen Code gepostet, da wird nichts in Tabelle geschrieben.
Ich baue keine Datei nach, die Zeit hat schon jemand investiert.
Ein Nachbau sieht bestimmt anders aus als das Original.
Ein Link zur Datei wäre nicht schlecht.
Benutze hier im Forum die Funktion zum hochladen. Falls Du die nicht benutzen möchtest beachte, von unsicheren Servern wie z.B. www.file-upload.net lade ich keine Datei runter. (lt. Einschätzung meines Virenprogramms)
Der Dateiname sollte was mit dem Problem zu tun haben.
Ich habe mir z.B. einen Ordner angelegt in dem ich alle Dateien aus dem Internet speichere. Bei Dateinamen wie Test..., Mappe…, Beispiel… wird eine vorhandene überschrieben.
Ein Bild in Excel geöffnet sieht anders aus als das Bild.
Ich habe kein Tool um ein Bild in Excel zu importieren.

Anzeige
AW: Textbox mit 1000er-Trennzeichen - Ausgabefehler
05.09.2014 10:48:22
Florian
Hallo Hajo,
danke schonmal für deine Antwort. Allerdings habe ich nicht den falschen Code gepostet, sondern hab nur das Eintragen der Variablen weggelassen.

Option Explicit
Dim bestMenge, FertigungsMenge As Long
Private Sub CommandButton3_Click()
Cells(letzteReihe, 7) = bestMenge
Cells(letzteReihe, 21) = FertigungsMenge
unload me
End Sub
Die ganze Datei kann ich leider nicht hochladen, aber ich werde versuchen den Fehler in einer anderen Datei nachzustellen.
Allerdings sollten die relevanten Code-Teile im Post enthalten sein.
Florian

Anzeige
AW: Textbox mit 1000er-Trennzeichen - Ausgabefehler
05.09.2014 10:49:56
Hajo_zi
Du schreibst Text in die Zelle und bei mir wird das in die Zelle geschrieben was in der TextBox steht.
Gruß Hajo

AW: Textbox mit 1000er-Trennzeichen - Ausgabefehler
05.09.2014 11:16:03
Florian
Hallo Hajo,
hier die Datei:
https://www.herber.de/bbs/user/92490.xlsm
Würde mich freuen, wenn du nochmal reinschaust und den Fehler findest.
In die drei Textboxfelder bitte jeweils die Zahl 10000 eintragen, oder eine andere Zahl größer 1000.
Danke Florian

AW: Textbox mit 1000er-Trennzeichen - Ausgabefehler
05.09.2014 11:20:34
Hajo_zi
Hallo Florian,
Private Sub CommandButton2_Click()
If IsNumeric(bestMenge) Then
Cells(1, 1) = CDbl(bestMenge)
End If
If IsNumeric(FertigungsMenge) Then
Cells(1, 2) = CDbl(FertigungsMenge)
End If
If IsNumeric(VersandMenge) Then
Cells(1, 3) = CDbl(VersandMenge)
End If
Unload Me
End Sub
Gruß Hajo

Anzeige
AW: Textbox mit 1000er-Trennzeichen - Ausgabefehler
05.09.2014 11:27:35
Florian
Servus Hajo,
danke.
Das bedeutet, dass sich Excel nicht sicher ist, was es machen soll und dann einmal so und einem anders entscheidet, wenn man nicht explizit mit CDbl den Variablenwert in "double" umwandelt, auch wenn die Variable bereits als Long definiert ist?
Florian

AW: Textbox mit 1000er-Trennzeichen - Ausgabefehler
05.09.2014 12:27:56
Florian
Servus Hajo,
danke.
Das bedeutet, dass sich Excel nicht sicher ist, was es machen soll und dann einmal so und einem anders entscheidet, wenn man nicht explizit mit CDbl den Variablenwert in "double" umwandelt, auch wenn die Variable bereits als Long definiert ist?
Florian

Anzeige
AW: Textbox mit 1000er-Trennzeichen - Ausgabefehler
05.09.2014 11:04:02
Daniel
Hi
In den TextBoxen stehen Texte.
Wenn du Textboxinhalte in Zellen schreibst, die wie Zahlen aussehen, versucht Excel, diesen Text in eine Zahl zu wandeln.
Allerdings legt es hier bei der Erkennung der Zahl das englische ZAHLENFORMAT zu Grunde, dh. mit Punkt als Dezimalzeichen und Komma als Tausendertrennzeichen.
Entweder musst du den Textboxtext mit CDbl() oder CLng() in eine Zahl wandeln, bevor du den Wert in die Zelle schreibst (diese Funktionen verwenden das Landestypische Schema), oder du musst die Zeichen ersetzen, so dass die Zahl "englisch" wird.
Cells(1, 1).value = CDbl(Textbox1.text)
Cells(1, 1).value = replace(replace(textbox1.text, ".", ""), ",", ".")
Gruß Daniel

Anzeige
AW: Textbox mit 1000er-Trennzeichen - Ausgabefehler
05.09.2014 11:08:38
Florian
Hallo Daniel,
danke für den Hinweis. Der Unterschied zwischen Text und Zahl ist mit bewusst.
Daher auch die Deklaration der Variable als "Long" und die Prüfung der TextBox-Eingabe mit IsNumeric().
Der Punkt ist, dass die gleiche Eingabe also 10000 in beiden TextBox so dargestellt 10.000 wird, was ja auch gewünscht ist, dann aber beim Schreiben des Wertes in die Zelle einmal zur Zahl 10 und einmal zur Zahl 10000 wird.
Würde beide Male die Zahl 10000 in der Zelle stehen, dann wäre es richtig.
Gruß
Florian

AW: Textbox mit 1000er-Trennzeichen - Ausgabefehler
05.09.2014 12:25:54
Daniel
Hi
das gleiche Problem hast du, wenn du den Wert erst einer LONG-Variablen zuweist.
bei
dim x as Long
x = Textbox1.Text

wendet VBA für die Umwandlung des Textbox-Textes in eine Ganzzahl das englische Format zum Erkennen der Zahl an, dh Punkt = Dezimalzeichen, "10.000" = 10
wenn die Zahl in der Textbox richtig erkannt werden soll, musst du entweder auch hier mit CLng arbeiten, welches für die Erkennung das landestypische (hier deutsche) Format verwendet ("10.000" = 10000), oder du formst den Text wieder so um, dass es eine "englische" Zahl ist, bei Ganzzahlen reicht es, wenn du den Punkt wieder entfernst:
dim x as long
x = Clng(Textbox1.Text)
x = Replace(Textbox1.Text, ".", "")
desweitern musst du beachten wenn du mit mehreren Variablen arbeitest:
Dim x, y as long

deklariert nur y als Long, x hingegen bleibt Variant.
dh bei
Dim x, y as long
x = Textbox1.Text
y = Textbox2.Text
wird nur x zu einer Textvariable und y bleibt Zahl
gruß Daniel

Anzeige
AW: Textbox mit 1000er-Trennzeichen - Ausgabefehler
05.09.2014 12:39:08
Florian
Hallo Daniel,
danke für die ausführliche Erklärung, die aber leider am Problem vorbei geht.
Die Frage ist, warum Excel trotz exakt gleicher Voraussetzungen zwei unterschiedliche Dinge tut.
x und y sind gleich deklariert und werden gleich eingelesen nur in zwei nebeneinander liegende Zelle geschrieben.
Wenn das "englische" Zahlenformat das Problem wäre, dann müsste aus 10.000 immer 10 gemacht werden.
Das passiert aber nicht.
einmal wird aus 10.000 10 und einmal 10000.
x = CDbl(TextBox1.value) reicht um den Fehler zu beheben, ist aber immer noch keine Erklärung für meine Frage.
Gruß
Florian
Hier noch die Datei zum nachvollziehen.
https://www.herber.de/bbs/user/92490.xlsm

Anzeige
AW: Textbox mit 1000er-Trennzeichen - Ausgabefehler
05.09.2014 13:05:05
Daniel
Hi
der Grund, warum es mal funktioniert und mal nicht ist, dass du deine Aufnehmenden Variablen unterschiedlich deklarierst:
Dim bestMenge, FertigungsMenge, VersandMenge As Long

deklariert:
bestMenge as Variant
FertigungsMenge as Variant
VersandMenge As Long
wenn du alle gleich deklarierst, sollte auch immer das gleiche Ergebnis rauskommen:
Dim bestMenge As Long, FertigungsMenge As Long, VersandMenge As Long
hatte ich aber im zweiten Teil meiner Erklärung beschrieben (wenn vielleicht auch etwas abstrakter)
Gruß Daniel

Anzeige
AW: Textbox mit 1000er-Trennzeichen - Ausgabefehler
05.09.2014 13:11:00
Florian
Servus Daniel,
jetzt hat es klick gemacht.
Ich dachte immer, dass kommagetrennte Variablen in einer Zeile als Gleiche deklariert werden, also:
Dim x, y as integer 
gleich
Dim x as integer
Dim y as integer
Wenn das nicht der Fall ist, dann wundert mich, warum meine anderen Makros so problemlos funktionieren.
Danke
Florian

AW: Textbox mit 1000er-Trennzeichen - Ausgabefehler
05.09.2014 13:45:05
Daniel
Hi
naja, die Variablen bekommen dann den Typ "Variant" und das funktioniert dann in den meisten Fällen ja auch, ist halt nur ein bisschen langsamer (was aber nur bei grossen Schleifen ins Gewicht fallen dürfte).
Problematsich wirds nur, wenn du die Verwendung von Text und Zahl mischst, die Implizite Typumwandlung verwendest und dabei im deutschen Excel nicht beachtest, ob der Text, den du eine Zahl wandelst, jetzt im Deutschen oder Englischen Format vorliegt und was VBA an dieser Stelle grade benötgit.
Gruß Daniel
Anzeige

152 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige