Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
808to812
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
808to812
808to812
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Zahlenformat in Textbox (UF)
09.10.2006 16:13:53
proxima05
Hallo, ich hätte da mal wieder eine Frage.
Die benutzerdefinierten Zahlenformate in einer Textbox sind ja nicht soooo einfach zu handhaben.
Über den folgenden Code will ich ein Zahlenformat festlegen, das vier Dezimalstellen hat:

Private Sub FX_AfterUpdate()
FX = Format(FX, "#,##0.0000")
End Sub

Aus 86,25 macht es mir 862.500 (gewünscht ist 86,2500),
aus 0,86 werden korrekte 0,8600 gemacht,
aus 1,25 werden 12.500.
Aus 186,25 macht die Formatierung 1.862.500.
Kann mir da jemand weiterhelfen (Anmerkung: Feste Dezimalstellen ist bereits ausgeschaltet).
Allerbesten Dank
Ralph

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zahlenformat in Textbox (UF)
09.10.2006 22:37:10
Gerd
Hallo Ralph,
in Excel 2000 funktionierts.
Kann sein, dass in Excel 2003 die Syntax abweichend ist.
Google mal oder warte bis sich jemand meldet, der den entsprechenden Unterschied
kennt oder variiere mal bei Punkt u. Komma des (Zahlen-)Formats.
Gruß
Gerd
AW: Zahlenformat in Textbox (UF)
09.10.2006 22:38:34
proxima05
Hallo, nachdem ich mich jetzt fast totge-googelt habe, bin ich darauf gestossen, dass man die Wandlung von Text (das scheint mir das Problem zu sein) nach Zahl über "Val" hinbekommt, oder evtl. mit mehreren If-Schleifen, die dann jeweils in eine Rechnung mündet ...... geht scheinbar nicht anders!
Vielleicht hat ja jemand noch eine Idee.
Gruß
Ralph
Anzeige
AW: Zahlenformat in Textbox (UF)
09.10.2006 23:13:30
fcs
Hallo Ralph,
das Problem ist in der Tat die Konvertierung der Texteingabe in eine Zahl beim Rückschreiben mit dem gewünschten Zahlenformat.
Statt der Funktion Val ist aber wahrscheinlich die Funktion CDbl die bessere Alternative für die Umwandlung der Eingabe in eine Zahl. CDbl verträgt jedoch keinen Text und auch keinen Leerstring als Funktionswert. Dshalb die On Error Anweisung.
Das Makro muss dann etwa so aussehen:

Private Sub FX_AfterUpdate()
On Error GoTo Fehler
Zahl = CDbl(FX.Value)
FX.Value = Format(Zahl, "#,##0.0000")
Exit Sub
Fehler:
MsgBox "Eingabe für FX ist keine Zahl"
End Sub

Gruss
Franz
Anzeige
AW: Zahlenformat in Textbox (UF)
10.10.2006 10:29:57
proxima05
Hallo Franz,
danke für Deinen Tipp .... habe den auch gleich probiert und bin auf folgendes Problem gestossen:
Die Zahl im UF wird zwar so dargestellt wird, wie im Zahlenformat festgelegt, aber in der Tabelle wird dann ein anderes Format daraus.
==================================

Private Sub FX_AfterUpdate()
On Error GoTo Fehler
Zahl = CDbl(FX.Value)
FX.Value = Format(Zahl, "#,##0.0000")
Exit Sub
Fehler:
MsgBox "Input Data must be numeric! ... "
End Sub

==================================
Eingabe ins Textfeld (UF): 0,25
Ausgabe/Umformatieren im Textfeld (UF): 0,2500 (das ist auch korrekt)
Ausgabe in der Zelle: 0,2500 (soweit so gut)
Sobald jedoch eine Zahl größer 1 in das Textfeld eingegeben wird, wird in der Zelle mit 10000 multipliziert.
Eingabe ins Textfeld (UF): 2,5
Ausgabe/Umformatieren im Textfeld (UF): 2,5000 (das ist auch korrekt)
Ausgabe in der Zelle: 25.000,0000 (soweit so gut).
Das Zahlenformat in der Zielzelle ist "Zahl".
Könnte das mit einer If-Schleife funktionieren? .... oder evtl. eine einfachere Lösung (an die ich aber fast nicht mehr glaube)
Das mit der MsgBox ist übrigens gut .... könnte man die aber erst dann einschalten, wenn das Eingabeformat keine Zahl ist .... ich habe die Schwierigkeit, dass diese Box schon hochkommt, wenn nur ein anderes Feld angeklickt wird (dieses Feld und das besagte Textfeld liegen in einem Rahmen)
Danke für Hilfe
Anzeige
AW: Zahlenformat in Textbox (UF)
10.10.2006 11:14:05
fcs
Hallo Ralph,
verwende statt der "AfterUpdate"- die "Exit"-Ereignisprozedur für die Textbox. Dann erfolgt die Formatierung der Eingabe beim Verlassen der Textbox.
Beim Eintragen der Daten in die Tabelle versucht Excel aus dem Textboxinhalt wieder eine Zahl zu machen. Dies solltest du im Makro, das die Inhalte der Textboxen in die Tabelle schreibt, gezielt steuern. Das Zahlenformat muss du entweder in der Tabelle festlegen oder im Makro der Zelle zuweisen. In der Prozedur für meinen OK-Button hab ich ein entsprechendes Beispiel eingebaut.

Private Sub CB_OK_Click()
With Worksheets("Meldung")
.Cells(2, 1).Value = CDbl(Me.FX.Value)
.Cells(2, 1).NumberFormat = "#,##0.0000"
End With
Unload Me
End Sub
Private Sub FX_Exit(ByVal Cancel As MSForms.ReturnBoolean)
On Error GoTo Fehler
Zahl = CDbl(FX.Value)
FX.Value = Format(Zahl, "#,##0.0000")
Exit Sub
Fehler:
MsgBox "Eingabe für FX ist keine Zahl"
End Sub

Gruß
Franz
Anzeige
AW: Zahlenformat in Textbox (UF)
10.10.2006 18:30:05
proxima05
Servus Franz,
ich habe Deinen Vorschlag aufgenommen (ihn leicht modifiziert, weil ich es mit einer Range zu tun habe und nicht nur mit einer einzelnen Zelle). Der Code für den OK-button sieht wie folgt aus:
==================================================

Private Sub OK_Click()
If Not ACT_365 And Not Act_360 Then
MsgBox "Please select the Day/Year Convention!", 64, "Warning"
Exit Sub
End If
Dim frm As UserForm
Set frm = UserForm1
Sheets("Cash Flow").Activate
Range("AA16").End(xlUp).Offset(1, 0).Select
With frm
ActiveCell.Value = .WKN.Value
ActiveCell.Offset(0, 1).Value = .Type_of_Bond.Value
'ActiveCell.Offset(0, 2).Value = .No.Value        hier muss noch ein Dialogfeld für die Cobold/Target-Nr.
ActiveCell.Offset(0, 3).Value = .Issuer.Value
ActiveCell.Offset(0, 4).Value = .Issuance.Value
ActiveCell.Offset(0, 5).Value = .Settlement.Value
ActiveCell.Offset(0, 6).Value = .Interest_Run.Value
ActiveCell.Offset(0, 7).Value = .Clean_Price.Value
ActiveCell.Offset(0, 9).Value = .Curr_Pair.Value
ActiveCell.Offset(0, 10).Value = .FX.Value
ActiveCell.Offset(0, 12).Value = .Maturity.Value
ActiveCell.Offset(0, 13).Value = .Coupon.Value
ActiveCell.Offset(0, 14).Value = .Coupon_Year.Value
ActiveCell.Offset(0, 15).Value = .Face_Value.Value
ActiveCell.Offset(0, 16).Value = IIf(ACT_365, "Ja", "Nein")
ActiveCell.Offset(0, 17).Value = IIf(Act_360, "Ja", "Nein")
ActiveCell.Offset(0, 18).Value = IIf(Long_1st, "Ja", "Nein")
ActiveCell.Offset(0, 19).Value = IIf(Y1_1, "Ja", "Nein")
ActiveCell.Offset(0, 20).Value = IIf(BrokenPeriod, "Ja", "Nein")
Range(Cells(2, 37), Cells(15, 37)).Value = CDbl(Me.FX.Value)
Range(Cells(2, 37), Cells(15, 37)).NumberFormat = "#,##0.0000"
.WKN.Value = ""
.Type_of_Bond.Value = ""
'.No.Value = ""
.Issuer.Value = ""
.Issuance.Value = ""
.Settlement.Value = ""
.Interest_Run.Value = ""
.Clean_Price.Value = ""
.Curr_Pair.Value = ""
.FX.Value = ""
.Maturity.Value = ""
.Coupon.Value = ""
.Coupon_Year.Value = ""
.Face_Value.Value = ""
.ACT_365.Value = False
.Act_360.Value = False
.Long_1st = False
.Y1_1 = False
.BrokenPeriod = False
End With
'With Worksheets("Cash Flow")
'End With
'Unload Me
End Sub


Private Sub FX_Exit(ByVal Cancel As MSForms.ReturnBoolean)
On Error GoTo Fehler
Zahl = CDbl(FX.Value)
FX.Value = Format(Zahl, "#,##0.0000")
Exit Sub
Fehler:
MsgBox "Eingabe für FX ist keine Zahl"
End Sub

==================================================
Die Passagen, die ich leicht modifiziert habe sind:
Range(Cells(2, 37), Cells(15, 37)).Value = CDbl(Me.FX.Value)
Range(Cells(2, 37), Cells(15, 37)).NumberFormat = "#,##0.0000"
Wenn ich jetzt einen Wert (bspw. 1,25) in der Textbox eingebe, dann passiert folgendes:
- die 1,25 werden nicht auf vier Dezimalstellen ergänzt (das war vorher anders)
- In der Range AK2:AK15 wird jede einzelne Zelle mit dem Wert 1,25 beschrieben (Format scheint zu funktionieren, aber dieser soll nur die Zelle beschrieben werden (siehe oben den Offset unter der Range AA16) ... wie kann ich das ändern?
Besten Dank für Deine Hilfe. Sorry, wenn ich da viel Code poste, aber ich denke mir, es macht Sinn, wenn man die Abfolge beim OK-Klick mal als Ganzes sieht.
Gruß
Ralph
Anzeige
AW: Zahlenformat in Textbox (UF)
10.10.2006 21:31:54
fcs
Hallo Ralph,
hoffe ich hab dich richtig verstanden, dann muss der Code für den OK-Button zum Eintrag von FX so angepasst werden. Das Format kannst du aber auch direkt in der Tabelle als Zellformat einrichten. Dann kannst du die entsprechende Zeile im Code weglassen.

Private Sub OK_Click()
If Not ACT_365 And Not Act_360 Then
MsgBox "Please select the Day/Year Convention!", 64, "Warning"
Exit Sub
End If
Dim frm As UserForm
Set frm = UserForm1
Sheets("Cash Flow").Activate
Range("AA16").End(xlUp).Offset(1, 0).Select
With frm
ActiveCell.Value = .WKN.Value
ActiveCell.Offset(0, 1).Value = .Type_of_Bond.Value
'ActiveCell.Offset(0, 2).Value = .No.Value        hier muss noch ein Dialogfeld für die Cobold/Target-Nr.
ActiveCell.Offset(0, 3).Value = .Issuer.Value
ActiveCell.Offset(0, 4).Value = .Issuance.Value
ActiveCell.Offset(0, 5).Value = .Settlement.Value
ActiveCell.Offset(0, 6).Value = .Interest_Run.Value
ActiveCell.Offset(0, 7).Value = .Clean_Price.Value
ActiveCell.Offset(0, 9).Value = .Curr_Pair.Value
ActiveCell.Offset(0, 10).Value = CDbl(.FX.Value)
ActiveCell.Offset(0, 10).NumberFormat = "#,##0.0000"
ActiveCell.Offset(0, 12).Value = .Maturity.Value
ActiveCell.Offset(0, 13).Value = .Coupon.Value
ActiveCell.Offset(0, 14).Value = .Coupon_Year.Value
ActiveCell.Offset(0, 15).Value = .Face_Value.Value
ActiveCell.Offset(0, 16).Value = IIf(ACT_365, "Ja", "Nein")
ActiveCell.Offset(0, 17).Value = IIf(Act_360, "Ja", "Nein")
ActiveCell.Offset(0, 18).Value = IIf(Long_1st, "Ja", "Nein")
ActiveCell.Offset(0, 19).Value = IIf(Y1_1, "Ja", "Nein")
ActiveCell.Offset(0, 20).Value = IIf(BrokenPeriod, "Ja", "Nein")
.WKN.Value = ""
.Type_of_Bond.Value = ""
'.No.Value = ""
.Issuer.Value = ""
.Issuance.Value = ""
.Settlement.Value = ""
.Interest_Run.Value = ""
.Clean_Price.Value = ""
.Curr_Pair.Value = ""
.FX.Value = ""
.Maturity.Value = ""
.Coupon.Value = ""
.Coupon_Year.Value = ""
.Face_Value.Value = ""
.ACT_365.Value = False
.Act_360.Value = False
.Long_1st = False
.Y1_1 = False
.BrokenPeriod = False
End With
'With Worksheets("Cash Flow")
'End With
'Unload Me
End Sub

Anzeige
AW: Zahlenformat in Textbox (UF)
10.10.2006 23:16:49
proxima05
Franz, Du hast mich richtig verstanden und auch die richtige Lösung gefunden! ......... ganz große Klasse!!! :-)
Der Wert aus der Textbox im UF wird jetzt mit vier Dezimalstellen dargestellt, unabhängig davon, wieviel da vor dem Komma steht.
Zwei Dinge sind mir aber jetzt noch aufgefallen.
1) Die Zahl in der Textbox wird nicht mit vier Dezimalstellen dargestellt (das wäre noch ein Zuckerl auf das Ganze (1,25 zu 1,2500)
2)Wenn ich die Textbox befüllt habe, danach in das nächste Feld springe und dann wieder in die Textbox zurückkehre, wird der Inhalt des Feld "Curr_Pair" (ist eine ComboBox) gelöscht.
Vielleicht hast Du da ja noch einen Tipp ................. trotzdem schon verbindlichsten Dank.
Gruß
Ralph
Anzeige
AW: Zahlenformat in Textbox (UF)
11.10.2006 20:48:16
fcs
Hallo Ralph,
zu 1.
ich dachte das Problem mit dem Format der Zahl in der Textbox hatten wir schon gelöst mit folgender Prozedur:

Private Sub FX_Exit(ByVal Cancel As MSForms.ReturnBoolean)
On Error GoTo Fehler
Zahl = CDbl(FX.Value)
FX.Value = Format(Zahl, "#,##0.0000")
Exit Sub
Fehler:
MsgBox "Eingabe für FX ist keine Zahl"
End Sub

wobei du die Sub FX_AfterUpdate-Prozedur entfernen solltest.
zu 2.
das Leeren der Combo-Box kann eigentlich nichts mit der Textbox zu tun haben, es sei den beim Ändern von Eingaben, Verlassen von Felden oder Klicks auf irgendwelche Element im Userform werden noch Aktionen ausgelöst, die auch die Combo-Box beeinflussen. Aus der Ferne kann ich da gar nichts zu sagen.
Gruß
Franz
Anzeige
AW: Zahlenformat in Textbox (UF)
12.10.2006 21:09:33
proxima05
Hi Franz,
ich habe das auch so eingegeben ..... das Ergänzen der Dezimalstellen geht nur über die Sub "FX_AfterUpdate" ..... bei "FX_Exit" macht er dies nicht.
Allerdings tritt bei beiden das Phänomen auf, dass die MsgBox nach Verlassen des UF aufgeht, obwohl der Wert in FX eine Zahl ist. Unabhängig davon, die Eingabe in der Textbox wird korrekt formatiert in den Tabellenbereich geschrieben.
Wenn ich GoTo und das was damit zusammenhängt entferne, dann bringt er mir Laufzeitfehler 13, Typen unverträglich und markiert in Code die Zeile
Zahl = CDbl(FX.Value)
?
Gruß
Ralph
Anzeige
AW: Zahlenformat in Textbox (UF)
13.10.2006 01:08:11
fcs
Hallo Ralph,
Das Problem:
Allerdings tritt bei beiden das Phänomen auf, dass die MsgBox nach Verlassen des UF aufgeht, obwohl der Wert in FX eine Zahl ist. Unabhängig davon, die Eingabe in der Textbox wird korrekt formatiert in den Tabellenbereich geschrieben.
Die Ursache:
Am Ende deiner OK-Button-Prozedur setzt du die Werte vieler Textboxen auf den Wert "".
In Verbindung mit diesen AfterUpdate-Prozeduren wird dann nochmals eine Berechnung für die Textbox FX durchgeführt und die spuckt dann die Fehlermeldung aus, weil "" keine Zahl ist. Setze für FX den Wert auf 0, dann kommt keine Fehlermeldung mehr.
Warum setzt du Werte überhaupt zurück?
Verwende die Unload-Methode, um das Userform zu entleeren und aus dem Speicher zu schmeißen.
Gruss
Franz
AW: Zahlenformat in Textbox (UF)
13.10.2006 21:49:48
proxima05
Hallo Franz,
das mit der Fehlermeldung an der richtigen Stelle funktioniert jetzt .... ich leere das UF jetzt mit UNLOAD; das funktioniert einwandfrei.
Allerdings kommt die Dezimalergänzung im Textfeld noch nicht zum Tragen. Ich weiss jetzt auch warum, aber (noch) nicht, wass ich dagegen tun kann.
Das Textfeld sitzt zusammen mit einer ComboBox (wobei ich denke, dass das egal ist) in einem Frame. Wenn ich mich innerhalb dieses Frame von der besagten Textbox in ein anderes Feld (im Frame) begebe, erfolgt die Aktualisierung (bzw. die Fehlermeldung, wenn falsches Format ...... sobald ich allerdings aus dem Frame herausspringe, funktioniert die Aktualisierung nicht.
Wie kann ich dem Textfeld jetzt sagen, dass es egal ist wo es nach einer Eingabe hingeht (es soll immer aktualisiert werden).
Hoffe Du weisst da Rat ..... besten Dank
Ralph

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige