Clever-Excel-Forum

Normale Version: Codezeile zur Formatierung der Userform verändert Format in der Zelle, aber warum?
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
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
Hallo Roy,

ein kleines Beispiel mit einer Textbox:

Code:
Option Explicit

Private Sub CommandButton1_Click()
    With Tabelle1
        .Cells(1, 1) = TextBox1
        .Cells(1, 1).NumberFormat = "#,##0.00 €"
    End With
End Sub

Private Sub UserForm_Initialize()
    TextBox1 = Format(Tabelle1.Cells(1, 1), "#,##0.00 €")
End Sub

Gruß Uwe
Hallo Uwe,
vielen Dank für den Tipp.

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
dann so:

Code:
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
Gruß Uwe
Hallo,

die Variante von @Egon12 etwas modifiziert: Wink

Code:
Private Sub CommandButton1_Click()
    With Tabelle1
        .Cells(1, 1).NumberFormat = "#,##0.00 €"
        .Cells(1, 1).Value = CDbl(TextBox1)
    End With
End Sub

Private Sub UserForm_Initialize()
    TextBox1 = Tabelle1.Cells(1, 1).Text
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.

Gruß und Danke
Roy
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
Gruß Uwe
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

Gruß Uwe
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
Gerne.