格式化用户窗体中的文本框

我有一个用户窗体包含多种格式的文本框。 我有初始化为空(“”),然后使用afterupdate()格式化它们。 这一切工作正常,我的问题来自于用户错过键入数据的可能性,或者只是在屏幕上漫无目的地点击。 input一个值后,从文本框中移动时,它将正确格式化。 但是,如果您重新select文本框然后再移开,它将清除该值。 如果你使用格式为百分比的文本框来实现这个function,那么实际上会出现一个不匹配的错误。

这是我目前的代码的一部分:

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 

任何关于如何清理这个问题的想法都会很棒。

这是你正在尝试?

 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 

注意 :我没有做任何其他error handling。 例如,用户input“Blah Blah”或在文本框中粘贴其他内容。 我相信你可以处理。

我会将基础值存储在TextBox的.Tag属性中,然后使用它在“input”和“退出”事件中来回更改格式:

 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