VBA Währungsrechner?
Ich dachte nicht, dass mir VBA Probleme machen würde, doch anscheinend doch. Ich programmiere seit gut drei Jahren und das, was am einfachsten ist, bringt mich gerade zum Verzweifeln. Es liegt aber auch daran, dass ich mich in VBA nicht gut auskenne.
Hier mein Problem:
Ich habe eine Userform mit zwei Textboxen. In die Textbox1 schreibe ich einen Wert hinein. Dieser Wert multipliziert sich dann mit dem Wert 61,7 aus der Spalte G2. Das Resultat erscheint anschließend in der Textbox2 mit der Währung CHF hintendran.
Das ist mein Code:
Private Sub CommandButton1_Click()
Unload Me
End Sub
Private Sub TextBox1_Change()
On Error Resume Next
TextBox2.Value = TextBox1.Value * Tabelle1.Range("g2").Value
End Sub
Private Sub TextBox2_Change()
On Error Resume Next
If TextBox2 <> "" Then
TextBox2 = Format(TextBox2, "##,##0.00 Fr.")
End Sub
Private Sub UserForm_Click()
End Sub
Nach meinen Erfahrungen her stimmt der Code. Es scheitert jedoch beim multiplizieren, denn für mein Programm ist 1 x 64,7 = 22’463.00 CHF.
2 Antworten
In deinem Code-Schnipsel fehlt der Teil mit der Multiplikation und der Teil in dem der String aus Textbox1 in eine Zahl umgewandelt wird.
So kann dir keiner helfen!
Der häufigste Fehler in VBA ist der automatische typecast bei Variablen des Typs Variant.
Ich schlage vor zunächst die Option "explicit" zu verwenden, die dem Kompiler anweise, keine automatischen Variablen-Declaration vorzunehmen. Du musst dann die Variablen am Begin des Programmes oder der Subroutine manuell deklarieren. Das ist etwas mühsam, hat aber zwei Vorteile. Erstens hast du die vole Kontrolle über deine Variablentypen und den damit verbundenen Einschränkungen der Rechenoperationen und zweitens zwingt es dich, strukturiert zu programmieren und dir zuerst zu überlegen, was du willst und was du dazu brauchst.
If TextBox2 <> "" Then
TextBox2 = Format(TextBox2, "##,##0.00 Fr.")
An dieser Stelle wolltest du doch sicherlich eigentlich mit dem Value-Property der TextBox2 arbeiten? TextBox2 ist eine GUI-Komponente, kein String.