2016-08-08 58 views
2

Ich habe ein Benutzerformular, das Textfelder mit mehreren Formaten enthält. Ich habe die Initialize als leer ("") und formatiere sie dann mit afterupdate(). Das alles funktioniert gut, meine Probleme kommen von der Möglichkeit, dass der Benutzer die Daten beim ersten Versuch misslingt oder ziellos auf den Bildschirm klickt. Nachdem Sie einen Wert eingegeben haben, formatiert er ihn korrekt, wenn Sie aus dem Textfeld wechseln. Aber wenn Sie das Textfeld erneut auswählen und dann wieder weggehen, wird der Wert gelöscht. Und wenn Sie dies mit dem Textfeld tun, das als Prozent formatiert ist, kommt es tatsächlich zu einem Fehler bei der Nichtübereinstimmung. HierFormatieren von Textfeldern in einem Benutzerformular

ist ein Stück meines aktuellen Code:

Private Sub UserForm_Initialize() 

    ValueAnalysisTextBox.Value = "" 

    CapRateTextBox.Value = "" 

End Sub 

Private Sub ValueAnalysisTextBox_AfterUpdate() 

    ValueAnalysisTextBox.Value = Format(Val(ValueAnalysisTextBox.Value), "$#,###") 

End Sub 

Private Sub CapRateTextBox_AfterUpdate() 

    CapRateTextBox.Value = Format(Val(CapRateTextBox.Value)/100, "Percent") 

End Sub 

Irgendwelche Gedanken darüber, wie dies zu bereinigen, wäre toll.

+0

Die Formatierung sollte während der Codeausführung erfolgen . Wenn Sie möchten, dass der Benutzer sieht, wie das Endergebnis aussehen wird, empfehle ich die Verwendung von Etiketten anstelle von Textfeldern, um den formatierten Text anzuzeigen. – tigeravatar

+0

Wenn Sie möchten, dass der formatierte Text in das Textfeld eingefügt wird, müssen Sie im Code "After_Update" eine Überprüfung durchführen, um festzustellen, ob der Textboxwert bereits im erforderlichen Format vorliegt, und wenn ja, nehmen Sie keine Änderungen vor. – tigeravatar

Antwort

0

Ist das, was Sie versuchen?

Private Sub ValueAnalysisTextBox_AfterUpdate() 
    Dim amt As Double 

    amt = Val(Replace(ValueAnalysisTextBox.Value, "$", "")) 

    ValueAnalysisTextBox.Value = Format(amt, "$#,###") 
End Sub 

Private Sub CapRateTextBox_AfterUpdate() 
    Dim Perct As Double 

    Perct = Val(Replace(CapRateTextBox.Value, "%", ""))/100 

    CapRateTextBox.Value = Format(Perct, "Percent") 
End Sub 

Hinweis: Ich bin nicht andere Fehlerbehandlung zu tun. Zum Beispiel, wenn der Benutzer "Blah Blah" tippt oder etwas anderes in die Textbox einfügt. Ich bin mir sicher, dass Sie damit umgehen können.

+0

Das produziere ich das gleiche Ergebnis für mich. Wenn sich bereits ein Wert in dem Textfeld befindet und Sie das Textfeld eingeben und es erneut beenden. Es löscht den ursprünglichen Wert. –

+0

Ich habe es versucht und es funktioniert gut für mich? Ist ',' dein Dezimaltrennzeichen? –

0

Ich würde speichern die zugrunde liegenden Werte in der .Tag Eigenschaft des TextBox, dann verwenden, um die Formatierung hin und her in den Enter und Exit-Ereignisse zu ändern:

Private Sub UserForm_Initialize() 
    ValueAnalysisTextBox.Value = vbNullString 
    ValueAnalysisTextBox.Tag = vbNullString 
End Sub 

Private Sub ValueAnalysisTextBox_Enter() 
    ValueAnalysisTextBox.Value = ValueAnalysisTextBox.Tag 
End Sub 

Private Sub ValueAnalysisTextBox_Exit(ByVal Cancel As MSForms.ReturnBoolean) 
    If IsNumeric(ValueAnalysisTextBox.Value) Then 
     ValueAnalysisTextBox.Tag = Val(ValueAnalysisTextBox.Value) 
     ValueAnalysisTextBox.Value = Format$(ValueAnalysisTextBox.Tag, "$#,###") 
    Else 
     ValueAnalysisTextBox.Tag = vbNullString 
    End If 
End Sub