25.07.2022, 21:29 (Dieser Beitrag wurde zuletzt bearbeitet: 25.07.2022, 21:32 von Royalty.)
Ich habe in einer Zelle einen Währungsbetrag stehen. Der wird in die Userform übernommen und da es dort nicht richtig angezeigt wird, habe ich folgende Formel eingefügt.
In der Userform wird der Wert in Label1 übernommen und dann im der folgenden Zeile formatiert Label1=finden.offset(0,2) Label1= Format(label1, "#,##0.00 €")
Ergebnis ist nun, das es in der Userform richtig angezeigt wird, doch die Zelle, in der der Wert steht, wandelt sich nun in Textformat um, so dass die Aufsummierung dann nicht mehr funktioniert. Der Ausgelesene Wert mit Label1=finden.offset(0,2) stellt die Währung ja nur als 9000 aus (Ohne Punkt und Nachkommastellen).
Gibt es noch eine andere Möglichkeit, die Anzeige in der Userform zu formatieren? Oder kennt jemand eine andere Lösung/Weg Gruß Roy
Problem ist, dass ich in der Userform auch folgendes verwende, um die Daten in der Tabelle zu überschreiben:
finde.offset (0,28)= Textbox1.value
Damit übergebe ich den Wert an die Tabelle. Jetzt weiß ich aber nicht, wie ich hier ein Format übergeben kann.
Die volle Funktion bei mir ist: Private sub test Dim finde as Range Set finde columns (1).find(what:=Kundennummer, Lookat:=xlwohole) If finde is nothing then msgbox "nicht gefunden" Else finde.offset(0,28)=Textbox1.value End if End Sub
Hier mußte ich schon bei Textbox1 das value anhängen, da er mir hier gleich beim übertrag das Format geändert hat. Mit Value übergibt er den Zahlenwert richtig und rechnet auch. Speicher ich nun und rufe den Fall wieder auf, veränderte sich das Format in Text. Als Auslöser habe ich folgende Codezeile lokalisiert: Label1= Format(label1, "#,##0.00 €") Seit diese herausgenommen ist, funktioniert alles richtig, nur in der Userform sieht das Format nicht gut aus.
Leider kann ich keine Beispieltabelle anhängen, da in der vorhandenen schon Daten von der Arbeit drin sind. Vielleicht bastel ich morgen mal ein kurzes Beispiel, in der Hoffnung, den (meinen) Fehler reproduzieren zu können
Ich werde morgen mal mit deinem Beispiel etwas rumprobieren. Vielleicht finde ich ja noch was. Aber danke Gruß Roy
Private Sub test() Dim finde As Range Set finde = Tabelle1.Columns(1).Find(what:=Kundennummer, Lookat:=xlWhole) If finde Is Nothing Then MsgBox "nicht gefunden" Else finde.Offset(0, 28) = Textbox1.Value finde.Offset(0, 28).NumberFormat = "#,##0.00 €" End If End Sub
Hallo Uwe, muß mich vorab entschuldigen, da ich leider etwas wichtiges im Code vergessen habe, anzugeben (war wohl etwas zu spät gestern).
Die Anweisung lautet vollständig:
Code:
Private Sub Textbox1_change()
Dim finde As Range
Set finde = Tabelle1.Columns(1).Find(what:=Kundennummer, Lookat:=xlWhole)
If finde Is Nothing Then
MsgBox "nicht gefunden"
Else
finde.Offset(0, 28) = Textbox1.Value
finde.Offset(0, 28).NumberFormat = "#,##0.00 €"
End If
End Sub
Durch die Anweisung _change führt die Code dazu, dass ich nur eine Ziffer eingeben kann, die dann in Währung formatiert wird. Mehr als eine Ziffer geht dann nicht, da die zweite Ziffer nach der Formatierung hinter dem € Zeichen eingefügt wird. Das ist natürlich nicht gewollt, aber durchaus nachvollziehbar.
Also nochmal Sorry. Ich werde etwas später mal eine Testdatei hochladen, dann ist es auch leichter nachzuvollziehen.
Schade, dass es mit Userform in Verbindung mit Währung etwas komplizierter ist. Da könnt Microsoft ruhig mal was dran machen.
26.07.2022, 15:42 (Dieser Beitrag wurde zuletzt bearbeitet: 26.07.2022, 16:36 von Egon12.)
Hallo Roy,
nimm das Ereignis Exit und nicht Change:
Code:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) Dim finde As Range Set finde = Tabelle1.Columns(1).Find(what:=Kundennummer, Lookat:=xlWhole) If finde Is Nothing Then MsgBox "nicht gefunden" Else finde.Offset(0, 28) = CDbl(TextBox1) finde.Offset(0, 28).NumberFormat = "#,##0.00 €" End If End Sub
oder, wenn es unbedingt Change sein soll, dann so
Code:
Private Sub TextBox1_Change() Dim finde As Range Set finde = Tabelle1.Columns(1).Find(what:=Kundennummer, Lookat:=xlWhole) If finde Is Nothing Then MsgBox "nicht gefunden" Else If InStr(TextBox1, ",") > 0 Then If InStr(Right(TextBox1, 3), ",") = 1 Then .Cells(1, 1) = CDbl(TextBox1) .Cells(1, 1).NumberFormat = "#,##0.00 €" End If End If End If End Sub
Vielleicht noch zur Ergänzung, damit nach der Eingabe der Ziffern der Rest (" €") ergänzt wird.
Code:
Private Sub TextBox1_Change() Dim finde As Range Set finde = Tabelle1.Columns(1).Find(what:=Kundennummer, Lookat:=xlWhole) If finde Is Nothing Then MsgBox "nicht gefunden" Else If InStr(TextBox1, ",") > 0 Then If InStr(Right(TextBox1, 3), ",") = 1 Then finde.Offset(0, 28) = CDbl(TextBox1) finde.Offset(0, 28).NumberFormat = "#,##0.00 €" TextBox1 = TextBox1 & " €" End If End If End If End Sub
Hallo Uwe, vielen Dank für die Hilfe. Dein Code hat mir echt weitergeholfen. Ich habe mich übrigens für die _exit Variante entschieden, wobei ich diese noch gar nicht kannte. Gruß Roy