2016-08-08 15 views
2

複数の書式のテキストボックスを含むユーザーフォームがあります。私は空白( "")として初期化し、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 
フォーマットは、コード実行中に行われるべきである
関連する問題