これが怖いの自分だけ?というものありますか?

VBAでTextBox2には半角数字のみしか入力できないように制御したいのですが、どうしたらよいのでしょうか。

TextBoxのプロパティでIMEModeを「8-fmIMEModeAlpha」というのにしたのですが、半角英字も入力できてしまいます。

どなたかよい方法をご教授ください。

A 回答 (4件)

#3 です。



失礼。#3 だと Tab と Enter まで入力できないので、以下に差し替えます。

  blnFlag = ((KeyCode >= 48) * (KeyCode <= 57)) _
      + ((KeyCode >= 96) * (KeyCode <= 105)) _
      + (KeyCode = 8) + (KeyCode = 13) + (KeyCode = 9)

> IMEModeを「8-fmIMEModeAlpha」

これだと入力モードの変更が可能なので、3-fmIMEModeDisable にしといた方が
良いかと思います。
    • good
    • 1
この回答へのお礼

ご回答どうもありがとうございます。

とても詳しく教えていただき、勉強になりました。

お礼日時:2006/09/21 23:03

こんにちは、KenKen_SP です。



こんな感じで KeyDown イベントを使えば可能だと思います。

Private Sub TextBox1_KeyDown( _
  ByVal KeyCode As MSForms.ReturnInteger, _
  ByVal Shift As Integer)

  Dim blnFlag As Boolean
  blnFlag = ((KeyCode >= 48) * (KeyCode <= 57)) _
      + ((KeyCode >= 96) * (KeyCode <= 105)) _
      + (KeyCode = 8)
  If Not blnFlag Then
    KeyCode = 0
  End If

End Sub

半角数字と Back Space しか受け付けません。Excel ユーザーフォーム
なら、この方法で Ctrl + V が抑止できますし、右クリックメニュー
は最初から表示されませんので、コピペは不可能です。

この方法で十分だと思いますが、ユーザーによる手動の入力を抑止して
いるだけで、完全に半角数字以外の入力を抑止しているわけではありま
せん。(プログラムからは入力可能とか)

念を入れるなら、Lost イベント等で入力値のチェックも行います。
    • good
    • 0

お世話になります。



残念ながら KeyPress だけだと、コピペされたときには操作内容によっては
発生しないイベントなので確実とは言いがたいです。
(私もかつて悩んだ経験があります)

なので、確実なのは LostFocus とかになると思うのですが、
入力時に省かせたいというのであれば
Key...系イベント(Down とか Press とか)も LostFocusも
どちらからも呼べるようなメソッドを作成すれば
万全かと思います。

参考URL:http://homepage1.nifty.com/rucio/main/technique/ …
    • good
    • 0
この回答へのお礼

ご回答どうもありがとうございます。

とても勉強になりました。

お礼日時:2006/09/21 23:03

KeyPressイベントで、キーコードを拾い、選択する、だと思います。



検索サイトで「KeyPress」をキーワードにして、検索してみてください。
    • good
    • 0
この回答へのお礼

ご回答どうもありがとうございました。

お礼日時:2006/09/21 23:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A