Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Codezeile zur Formatierung der Userform verändert Format in der Zelle, aber warum?
#1
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
Antworten Top
#2
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


Angehängte Dateien
.xlsm   Euro in Zelle zurückschreiben.xlsm (Größe: 17,32 KB / Downloads: 1)
Antworten Top
#3
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
Antworten Top
#4
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
Antworten Top
#5
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
Antworten Top
#6
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
Antworten Top
#7
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
Antworten Top
#8
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
Antworten Top
#9
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
Antworten Top
#10
Gerne.
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste