Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema CommandButton
BildScreenshot zu CommandButton CommandButton-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Label
BildScreenshot zu Label Label-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

Textbox mit 1000er-Trennzeichen - Ausgabefehler

Betrifft: Textbox mit 1000er-Trennzeichen - Ausgabefehler von: Florian
Geschrieben am: 05.09.2014 10:25:18

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

  

Betrifft: AW: Textbox mit 1000er-Trennzeichen - Ausgabefehler von: Hajo_zi
Geschrieben am: 05.09.2014 10:38:56

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.

GrußformelHomepage


  

Betrifft: AW: Textbox mit 1000er-Trennzeichen - Ausgabefehler von: Florian
Geschrieben am: 05.09.2014 10:48:22

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


  

Betrifft: AW: Textbox mit 1000er-Trennzeichen - Ausgabefehler von: Hajo_zi
Geschrieben am: 05.09.2014 10:49:56

Du schreibst Text in die Zelle und bei mir wird das in die Zelle geschrieben was in der TextBox steht.

Gruß Hajo


  

Betrifft: AW: Textbox mit 1000er-Trennzeichen - Ausgabefehler von: Florian
Geschrieben am: 05.09.2014 11:16:03

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


  

Betrifft: AW: Textbox mit 1000er-Trennzeichen - Ausgabefehler von: Hajo_zi
Geschrieben am: 05.09.2014 11:20:34

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


  

Betrifft: AW: Textbox mit 1000er-Trennzeichen - Ausgabefehler von: Florian
Geschrieben am: 05.09.2014 11:27:35

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


  

Betrifft: AW: Textbox mit 1000er-Trennzeichen - Ausgabefehler von: Florian
Geschrieben am: 05.09.2014 12:27:56

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


  

Betrifft: AW: Textbox mit 1000er-Trennzeichen - Ausgabefehler von: Daniel
Geschrieben am: 05.09.2014 11:04:02

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


  

Betrifft: AW: Textbox mit 1000er-Trennzeichen - Ausgabefehler von: Florian
Geschrieben am: 05.09.2014 11:08:38

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


  

Betrifft: AW: Textbox mit 1000er-Trennzeichen - Ausgabefehler von: Daniel
Geschrieben am: 05.09.2014 12:25:54

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


  

Betrifft: AW: Textbox mit 1000er-Trennzeichen - Ausgabefehler von: Florian
Geschrieben am: 05.09.2014 12:39:08

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


  

Betrifft: AW: Textbox mit 1000er-Trennzeichen - Ausgabefehler von: Daniel
Geschrieben am: 05.09.2014 13:05:05

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


  

Betrifft: AW: Textbox mit 1000er-Trennzeichen - Ausgabefehler von: Florian
Geschrieben am: 05.09.2014 13:11:00

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


  

Betrifft: AW: Textbox mit 1000er-Trennzeichen - Ausgabefehler von: Daniel
Geschrieben am: 05.09.2014 13:45:05

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


 

Beiträge aus den Excel-Beispielen zum Thema "Textbox mit 1000er-Trennzeichen - Ausgabefehler"