2017-05-09 15 views
0

私のuserformには、TextBoxに数字または空が含まれていない場合、MsgBoxにしたいです。 これは私のコードですが、別のケースではTextBox = "" MsgBoxを空にすると表示されるので、私の問題は空のTextBoxです。VBA UserForm TextBoxのみ数値と空のテキストを許可

Private Sub TB1_Change() 
    If TypeName(Me.TB1) = "TextBox" Then 
     With Me.ActiveControl 
      L12.Caption = Val(TB1.Text) * Val(TB2.Text) 
      If Not IsNumeric(.Value) And .Value <> vbNullString Then 
       MsgBox "Sorry, only numbers allowed" 
       .Value = vbNullString 
      End If 
     End With 
    End If 
End Sub 
+0

「MsgBox」とは何ですか?申し訳ありませんが、番号のみが許可されていますが、「」と「値」と「 '」が入力されました。 –

+0

申し訳ありませんPeh私はmsgを理解できませんでした。 –

+1

あなたのMsgBoxコードを私が掲示したコードに置き換えてください。コードを実行し、テキストボックスが空のときにMsgBoxにあるものを教えてください。 –

答えて

2

この目的でキープレスイベントを使用します。

Private Sub TB1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) 
    If Not IsNumeric(Chr(KeyAscii)) Then KeyAscii = 0 
End Sub 

この手順では、数字でない場合は入力する内容は無視されますが、条件と出力の両方を変更できます。たとえば、小数点の入力を許可する場合や、おそらく2回目の試行でのみメッセージボックスを表示したい場合があります。

0

"数値"と "空白"のみを許可しようとしているので、以下のコードはあなたのニーズを満たすでしょう。

Private Sub TB1_Change() 
    if IsNumeric(Me.TB1.Value) = True or Me.TB1.Value = vbNullString then 
     'Good data, nothing to MSG 
    Else 
     MsgBox "Your input data is not valid" 
    Endif 
End Sub 
+0

あなたの答えは確かに少し説明する価値があります。親切にも、http://stackoverflow.com/help/how-to-answerを参照してください。コメントは検索可能なコンテンツの作成に役立ちます。 –

0

また、ユーザーが無効な値を入力した場合Exitイベントを使用して終了をキャンセルしたいかもしれませんが、代わりにChangeイベントのをAfterUpdateイベントハンドラを使用することがあります。

Option Explicit 
Private Sub TB1_AfterUpdate() 
    'Check whether the value is numeric or empty: 
    If Not IsValNumeric(Me.TB1.Value) Then 
     MsgBox "Sorry, only numbers allowed" 
     Me.TB1.Value = vbNullString 

    Else: 
     'Do something... 
     MsgBox val(TB1.Text) * val(TB2.Text) 
    End If 
End Sub 
Private Sub TB1_Exit(ByVal Cancel As MSForms.ReturnBoolean) 
    'Prevents the user from EXIT the TextBox if value is not numeric/empty 
    Cancel = Not IsNumeric(Me.TB1.Value) 
End Sub 
Private Function IsValNumeric(val$) As Boolean 
    Dim ret As Boolean 
    'check for numeric value only and allow empty value as a zero value 
    ret = IsNumeric(val) Or Len(val) = 0 
    IsValNumeric = ret 
End Function 
0

あなたはユーザが入力を終了してフィールドをテストするまで待つことができます。

ユーザビリティのために、メッセージボックスは、キャプションと、enter image description hereのようなアイコン/ピクチャに置き換えてください。「ここに番号を入力する必要があります。

これらは、入力が間違っている場合、テキストボックスの横に表示されます。入力が修正されると非表示になります。すべてのエラーが修正されるまで、フォームの提出をブロックすることができます。

これにより、ユーザーは要求データを入力し、入力エラーを修正できます。これは間違いを犯すたびにそれらを止めるよりも優れています。

イベントがからに変更されました。出口に変更されました。

Private Sub TB1_Exit(ByVal Cancel As MSForms.ReturnBoolean) 
    If TypeName(Me.TB1) = "TextBox" Then 
     With Me.ActiveControl 
      L12.Caption = Val(TB1.Text) * Val(TB2.Text) 
      If Not IsNumeric(.Value) Or .Value = vbNullString Then 
       MsgBox "Sorry, only numbers allowed" 
       .Value = vbNullString 
      End If 
     End With 
    End If 
End Sub 

vbNullStringテストも更新されました。

関連する問題