2016-08-08 42 views
2

我有一個用戶表單,其中包含具有多種格式的文本框。我將Initialize設置爲空白(「」),然後使用afterupdate()格式化它們。這一切都正常工作,我的問題來自用戶錯過鍵入數據的可能性,或者只是在屏幕上漫無目的地點擊。輸入一個值後,從文本框移動時,它會正確格式化它。但是,如果您重新選擇文本框,然後再移開,它會清除該值。如果您使用格式爲百分比的文本框來執行此操作,那麼實際上會出現錯誤錯誤。格式化用戶表單中的文本框

這裏是我當前的代碼片:

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 

關於如何清潔起來將是巨大的任何想法。

+0

的格式應該代碼執行過程中進行。如果您希望用戶看到最終結果的樣子,我建議使用標籤而不是文本框來顯示格式化文本。 – tigeravatar

+0

如果您需要格式化的文本在文本框中,您必須在'After_Update'代碼中引入一個檢查來查看文本框值是否已經以必要的格式顯示,如果是,請不要更改。 – tigeravatar

回答

0

這是你正在嘗試?

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 

注意:我沒有做任何其他錯誤處理。例如,用戶輸入「Blah Blah」或在文本框中粘貼其他內容。我相信你可以解決這個問題。

+0

這我對我產生同樣的結果。如果文本框中已經有一個值,並且您輸入文本框並再次退出。它清除了原始值。 –

+0

我試過了,它對我來說工作得很好?是','你的小數點分隔符? –

0

我的基本值存儲在文本框的.Tag財產,然後用它來更改格式的進入和退出事件前後:

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