• ベストアンサー

Back Spaceを入力可にするには?

金額を入力して計算するルーチンを作成しています。 以下のコードで、数字以外は入力不可にしたのですが・・・・ 数値を訂正するためのBack Spaceも入力できなくて困っています。 0~9までしか受け付けないコードなのはわかっていますが、それに加えてBack Spaceも受け付けられるようにするにはどんなコードを書けばよいでしょうか。 Private Sub genkin_KeyPress(KeyAscii As Integer) If KeyAscii >= Asc("0") And KeyAscii <= Asc("9") Then Exit Sub Else KeyAscii = 0 Beep End If End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.2

どもども田吾作7です >If KeyAscii >= Asc("0") And KeyAscii <= Asc("9") Then Exit Sub ここの意味を理解されてますでしょうか? これはパラメータのKeyAsciiの入力制限を行っております。 Asc(0)は48です。Asc("9")は57です。 まずそれはそれでおいといて、、、 プレスイベントのコードをコメントして、 Debug.Print KeyAscii と書いて文字入力してみてください。 イミディエイトウィンドウに、入力された文字コードが出力されます。 同時に[BackSpace]が8という値が得ることもわかると思います。 ですのでプレスイベントは、次のようになります。 If KeyAscii >= Asc(0) And KeyAscii <= Asc(9) Then Exit Sub If KeyAscii = 8 Then Exit Sub KeyAscii = 0 Beep これは参考までなのですが・・・ Microsoft Masked Edit Controlというのをご存知ですか? メニューバーの[プロジェクト][コンポーネント]の中に存在しています。 これを使用すると、数値、日付など、入力制限を行うことの出来ます。 でわでわ

xiaolong_goo
質問者

お礼

ありがとうございます。 もう初心者には何が何だか・・・ の世界で本当に助かります。 Microsoft Masked Edit Control を早速フォームに乗せてみました。 こんな便利なコントロールがあるなんて、「そんなん知ら~ん!」って感じでした。

その他の回答 (1)

noname#9414
noname#9414
回答No.1

手元にVisual Basicがないので、確認はしていませんが 以下のコードではダメなのでしょうか? Private Sub genkin_KeyPress(KeyAscii As Integer)  If(KeyAscii >= Asc("0") And (KeyAscii <= Asc("1")) _    Or KeyAscii <> Asc(バックスペースの番号) Then   Exit Sub  Else   KeyAscii = 0   Beep  End If End Sub これではだめなのでしょうか? ではでは☆

xiaolong_goo
質問者

お礼

教えていただいたコードを参考に何とか解決しました。 ありがとうございました。

xiaolong_goo
質問者

補足

or でつなぐとなぜかどんなキーでも受け付けてしまいます。 なぜでしょうか・・・ 何度試してもだめなんですよね。 どこかコードがまちがっているのかなぁ・・・

関連するQ&A

  • 16進数

    Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii >= Asc("a") And KeyAscii <= Asc("f") Then Else KeyAscii = 0 Beep End If End Sub 上のソースだと数字が入りません。 どうすれば入力できますか。 ※zと入れると強制終了になってしまうので、上のソースを入れたんですが・・・ ※タグが崩れて見にくくてすいません

  • キー入力を制限しつつ、Ctrl+CやCtrl+Vを活かすには?

    数字とバックスペース以外入力できないテキストボックスTextBoxAを作りました。 Private Sub TextBoxA_KeyPress(KeyAscii As Integer) If KeyAscii <> vbKeyBack Then If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then KeyAscii = 0 End If End If End Sub と記述しましたが、Ctrl+CやCtrl+Vが効きません。 右クリックでコピー、ペーストはできるのですが、コントロールキー によるコピペを可能にするにはどうしたらいいでしょうか? どなたかよろしくお願いします。

  • vb作成したらでbeep音が鳴ります。経験あるかたお願いします。

    KeyPressイベントを追加して、データ入力後にエンターキーを押すとbeep音が鳴ります。ほかではescキーも鳴りますが、その他は鳴らないで動くようです。 単純に新規作成から、Form1へtestテキストコントロールを追加して、以下の記述をしただけなのですが、どうしてなるのか原因がわかりません。 Private Sub test_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then test.text="ok" End If End Sub ←この次でbeep音! 環境はvb6.0、windows2000。 仕様なのでしょうか? ハード側の問題なのでしょうか? 経験あるかた宜しくお願い致します。

  • テキストの入力時、カーソルの移動をスムーズにしたい

     VB6で複数入力項目(テキスト/コンボボックス等)がある画面を作っているのですが、文字が最大桁数に達したら、次のコンボボックスへカーソル(=フォーカス)を移動し、次の入力項目へを行いたいのですが、 どうも思った様に、移動しないです。  以下は半角数字項目が最大文字数に達した場合、次のインプットボックスへフォーカスが移動する様に組んでみました。 Private Sub Txt_Input_KeyPress(KeyAscii As Integer) If KeyAscii <> 8 And (KeyAscii < 48 Or KeyAscii > 57) Then KeyAscii = 0 If Len(Txt_Input.Text) >= (Txt_Input.MaxLength - 1) Then Txt_Input2.SetFocus End If End Sub ところが、バックスペースでも1文字分と捉えてしまう様で、3文字入力の場合等は先頭から入力し直さないと、再入力も儘ならない状態です。 何かバックスペースも自然に効く形で同様の制御は行えないものでしょうか。 (尚、MaxLength - 1の部分は-1しないとフォーカスが動きませんでした。)

  • 16進数

    (.net) テキストボックスに16進数のみ入力が出来るようにするにはどうすればいいのdしょうか? VB6では下記ので出来たと思うのですが netではできないのです。 教えて下さい。 If KeyAscii >= Asc("0") And KeyAscii <= Asc("9") Then Else If KeyAscii >= Asc("a") And KeyAscii <= Asc("f") Then Else KeyAscii = 0 Beep End If End If

  • VBA エンターキーでイベントに入りたい。

    テキストボックスにデータ入力後エンターキーの押下でイベントに入りたいのですが、下記のコーディングで[通過]メッセージが表示されません。英数字は通過しますが、エンターキーは動作停止します。 これと全く同じコーディングでVB6は正しく動きます。(ただし、Pvate Sub text1_KeyPress(KeyAscii As Integer)に変更してます。) <コーディング> Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) Msgbox "通過" If KeyAscii = vbKeyReturn Then KeyAscii = 0 End If End Sub これが出来ると、そのつどキーボードから手を離さずに済むので作業効率がグンとあがります。どうかよろしくご教示ください。Excel2003SP3

  • 特定の文字だけ太文字にするには・・

    簡易チャット作ってます。発言者の名前の部分だけ太文字にしようとしてい ます。 テキストボックス2に文を書いてエンターを押すとテキストボックス1に書 花子:~~~  と書き込まれるようにはできました。花子の部分 だけふと文字にするには?? Private Sub Text2_KeyPress(KeyAscii As Integer) If (KeyAscii = 13) Then Text1.Text = Text1.Text + "花子:" + Text2.Text + vbCrLf Text2.Text = "" KeyAscii = 0 End If End Sub

  • ACCESS2003のテキストボックスの最大桁数について

    Access2003のテキストボックスには、MaxLengthプロパティがありません。変わりに以下のような、コードで対応しようと試みたのですが、いまいち動きが悪いのです。以下のコードは、最大4桁までテキストボックスに入力可能とします。 Private Sub txtBox_KeyPress(KeyAscii As Integer)   If Len(txtBox.Text) > 3 Then     KeyAscii = 0   End If End Sub 最大入力桁数4桁を実現していますが、4桁入力後『Insert』キーを押下して、上書きモードでの修正ができません。 以下例1はOKですが、例2が実現できません。 例1:1回目新規入力『12』 ⇒ 2回目修正『123』⇒3回目修正『1234』 例2:1回目新規入力『1234』 ⇒ 2回目修正『9999』 VBのMaxLengthプロパティのようなことはできないのでしょうか?

  • アクセス レポート バックカラーの変更方法

    現在レポートで1行ごとにバックカラーを変えて印刷しておりますが、それをチェックボックスにチェックがはいった行だけをカラーにするよう変更したいと考えておりますが、よくわかりません。現在のコードをコピーしました。お手数ですがご指導願います。 Option Compare Database Dim bline As Integer Private Sub Report_Open(Cancel As Integer) End Sub Private Sub ページヘッダー_Format(Cancel As Integer, FormatCount As Integer) bline = 0 End Sub Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer) bline = bline + 1 If bline Mod 2 Then Me.Section(0).BackColor = 16777215 Else Me.Section(0).BackColor = 12663225 End If End Sub

  • カレンダー機能について

    VBでカレンダーのプログラムを作成していて現在「年」と「月」がコンボボックスになっていてプルダウンより選択することでClickイベントが走りそれより取得した値を基にカレンダーを表示させているのですが追加でコンボボックスに直接キーボードより入力しEnterキーを押した時に入力した値を基にカレンダーを表示させたいのですが上手くいきません。以下の方法ではだめなのでしょうか?よろしくお願いします。 (一部抜粋) Private Sub cboList_month_KeyPress(KeyAscii As Integer) If KeyAscii = vbKeyReturn Then Call cboList_month_Click() Exit Sub End If End Sub Private Sub cboList_month_Click() Select Case cboList_month.ListIndex Case 0 mintCur_month = 1 … Case 11 mintCur_month = 12 End Select Call calender_hyouzi 'カレンダーを表示させる関数 Exit Sub End Sub