数値しか入力出来ないように制限する
                                                         玄関へお回り下さい。
テキストボックスに数値しか入力出来ないように制限する関数(改良型) (069)
     
Option Explicit   'SampleNo=069 WindowsXP VB6.0(SP5) 2002.05.15
'標準モジュール等に記入して下さい。
'===================================================================
'      |テキストボックスを監視して数字以外が入力されたら
' 〃⌒⌒ヽ |削除する関数、− や . は入力可で貼付にも対応している
'..ノノノノ)|使用方法は設定するテキストボックスの Change イベントに
'★§∩ ∩ |fTextBoxNumberCheck Text1 のようにそのテキストボックスを
'彡人 ▽ノ |指定するだけでOKです。数字以外が入力されていたら抜出して
'   -   |Text1.Text に返します。関数の戻り値は数字以外が入力されて
'      |いたら True が返ります。
'===================================================================
Private Function fTextBoxNumberCheck(ByVal MyTextBox As TextBox) As Boolean
  Dim i As Long
  '戻り値を初期値に設定
  fTextBoxNumberCheck = False
  '入力文字を1文字づつチェック
  For i = 1 To Len(MyTextBox)
    '最初の1文字目以外に−が入っていたら削除
    If Mid$(MyTextBox, i, 1) = Chr$(45) And i <> 1 Then
      fTextBoxNumberCheck = True
      '- を文字列から抜き取りテキストボックスに代入
      MyTextBox = Mid$(MyTextBox, 1, i - 1) & _
          Mid$(MyTextBox, i + 1, Len(MyTextBox) - i)
      Beep
      'カーソル位置をテキストの末尾へ
      MyTextBox.SelStart = Len(MyTextBox.Text)
      'フォーカスを元のテキストボックスに戻す
      MyTextBox.SetFocus
      Exit Function
    End If
    '0〜9 - . 及び Enter Tab 等の制御文字以外を削除
    If Mid$(MyTextBox, i, 1) >= Chr$(32) And Mid$(MyTextBox, i, 1) _
        < Chr$(45) Or Mid$(MyTextBox, i, 1) _
          > Chr$(57) Or Mid$(MyTextBox, i, 1) = Chr$(47) Then
      '文字が含まれていたら True に設定
      fTextBoxNumberCheck = True
      '以下上記同様の処理
      MyTextBox = Mid$(MyTextBox, 1, i - 1) & _
          Mid$(MyTextBox, i + 1, Len(MyTextBox) - i)
      Beep
      MyTextBox.SelStart = Len(MyTextBox.Text)
      MyTextBox.SetFocus
      Exit Function
    End If
  Next i
End Function


Private Sub Text2_Change()
  Dim Result As Boolean
  Result = fTextBoxNumberCheck(Text2)
  '又は簡略化して fTextBoxNumberCheck Text2
End Sub

普通は下記のように設定されているのを多く見かけますが!
Private Sub Text1_KeyPress(KeyAscii As Integer)
  If KeyAscii >= 32 And KeyAscii < 48 Or KeyAscii > 57 Then
    beep           'エラー音
    KeyAscii = 0      '入力キーを無効にする
  End If
End Sub

上記の設定ですと、マイナスキーやコンマ等入力できず、貼付されたらアウトです。
APIを使った方法も有りますが動作は上記同様です。

Private Sub Text1_KeyPress(KeyAscii As Integer)
   
If KeyAscii >= 32 And KeyAscii < 45 Or KeyAscii > 57 Or KeyAscii = 47 Then
        Beep                    
'エラー音
        KeyAscii = 0            
'入力キーを無効にする
   
End If
End Sub
これで、カンマとマイナスキーは入力できます。簡易的に使うならこれでもいいかも

そこで、関数化して、マイナスキーとコンマが入力出来るように設定しChangeイベントで監視
することによって貼り付けられた文字列もチェックできます。






2002/05/16