VBA Funktuion Summe auffüllen erweitern
25.10.2018 10:17:55
Jarek
ich verfolgende schon länger Einträge hier im forum und konnte schon sehr oft mir mit den gefundenen Infos weiterhelfen, aber jetzt stehe ich vor einem Problem, welches mich in den Wahnsinn treibt. Ich hoffe, dass mir jemand helfen kann.
Ich habe bei mir in der Firma einige Excel Makros von meinem Vorgänger übernommen und versuche stellenweise Fehler auszubessern, bzw. zu optimieren.
Mein Problem gestaltet sich wie folgt:
In einer Userform wird eine Summe in eine Textbox eingetragen. diese Summe ist immer in den tausender Bereichen, manchmal aber auch im Millionenbereich.
Damit die Eingabe flotter geht, habe ich in dem code eine Funktion die angesprungen wird um die Summe in der Textbox mit 1.000 zu multiplizieren.
Der Code sieht so aus:
Function SummeAuffüllen(ByVal AbZeichen As Integer, ByVal Summe) As Variant
If IsNumeric(Summe) Then
If Len(Summe) = AbZeichen Then
Summe = Summe * 1000
SummeAuffüllen = Format(CDbl(Summe), "#,###,###")
End If
SummeAuffüllen = Format(CDbl(Summe), "#,###,###")
Else
SummeAuffüllen = ""
End If
End Function
Der Aufruf zur Funktion gestaltet sich dann so:
Private Sub txtSumme_Change()
txtSumme.Value = SummeAuffüllen(3, txtSumme.Value)
End Sub
Das "Problem" das ich an dieser Stelle habe ist, dass der Cursor in der Textbox dann ans ende springt. Will man jetzt eine Zahl im Millionenbereich eingeben wird die Eingabe hinten fortgesetzt.
Sprich aus 1.234.000 wird 1.230.004, weil nach der dritten Zahl die Multiplikation vorgenommen wird.
Mein erster Versuch das zu beheben war die Ergänzung im Aufruf der Funktion --> Private Sub _
txtSumme_Change() um diesen Code-Schnipsel:
If Len(Me!txtSumme) > 5 Then
Me!txtSumme.SelStart = Len(Me!txtSumme) - 3
End If
das bewirkt jedoch, dass ich nach jeder Eingabe auf die Tausenderstelle springe, selbst wenn ich dcoh etwas im Einstelligen Bereich eingeben will
Kann dieser schnipsel irgendwie in die Funktion SummeAuffüllen eingabaut werden, so dass nur wen die Funktion ausgeführt wird, der Cursor einmalig um 3 Stellen nach links verschoben wird? Hintergrund ist, dass die Funktion für mehrere TextBoxen verwendet wird.
Vielen Dank vorab!