- ベストアンサー
フォームのテキストボックス内での処理
●VB6.0を使用しているのですが、テキストボックスで全角スペースのみ又は半角スペースのみの入力をした時msgboxでエラー処理するにはどうしたらいいのでしょうか? ●またテキストボックスで半角英数しか入力できないようにする処理があれば教えていただけますか?
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
#2さんの処理だけですと、(マウスでの)コピー&ペーストで全角文字等が入力できてしまいますね(^^; なので、Change()イベントでもチェックしたほうがいいですね。 Private Sub Text1_Change() Dim iLen As Long Dim i As Long Dim strBuf As String Dim strCheck As String Static checkFlag As Boolean '本来はモジュール変数で 'Textに新しい値を入れると、このイベントが2度起こるのでそれを防ぐ '防がなくてもいいですけど(^^; If checkFlag Then checkFlag = False Exit Sub End If iLen = Len(Text1.Text) '文字のチェック。 For i = 1 To iLen strCheck = Mid$(Text1.Text, i, 1) '本来はAsc()で比較すべきですが・・・ If (strCheck >= "0" And strCheck <= "9") Or _ (strCheck >= "a" And strCheck <= "z") Or _ (strCheck >= "A" And strCheck <= "Z") Then strBuf = strBuf & strCheck End If Next i checkFlag = True Text1.Text = strBuf End Sub
その他の回答 (4)
・全半角ブランクのみか否かは入力終了後でないと不可ではないでしょうか? ・changeイベントでのチェックは全角が入力された場合のみのチェックでも用が足りると思います。 Option Explicit Private Sub Text1_Change() If LenH(Me.Text1 & "") <> Len(Me.Text1 & "") Then ' ' キーチェック ' End If End Sub Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer) Dim Cancel As Boolean If KeyCode = 13 Then If Len(Me.Text1 & "") > 0 Then Cancel = CBool(Len(Trim(Replace(Me.Text1, " ", " "))) = 0) If Cancel Then MsgBox "全半角ブランクにみが入力されました。" End If End If End If End Sub Public Function LenH(ByVal Text As String) As Integer LenH = LenB(StrConv(Text, vbFromUnicode)) End Function
お礼
ありがとうございました。
- imogasi
- ベストアンサー率27% (4737/17069)
特に後半の質問について(前半も同じ考えでできると思う) テキストボックスのイベントで Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) ' MsgBox KeyCode Select Case KeyCode Case Asc("0") To Asc("9") Case Asc("A") To Asc("Z") Case Asc("a") To Asc("z") Case Asc(" "), 16, 17, 8, 13, 46, 37, 39, 189 Case Else MsgBox "文字不許可" KeyCode = 0 End Select End Sub Case Asc(" "), 16, 17, 8, 13, 46, 37, 39, 189 はテキストボックスで普通使いそうな特殊キーの入力許可です。 少数でテストしてますが、実務的に使ったことなく、自信はありませんが、ヒントにでもなれば。 特にどこかで文字列をコピーし、テキストボックスに貼り付け問題は痛い点で、考えていませんので考えてください。 やはり入力即時指摘はあきらめて、改行入力時に、文字を1文字ずつコードを調べて、不許可の文字があれば全体不許可にするよりほかないのかも知れない。
お礼
ありがとうございます。参考にさせてもらいます。
- pen_pen_pen
- ベストアンサー率65% (52/79)
■スペースのチェック If Len(Trim(StrConv(Text1.Text, vbNarrow))) = 0 Then MsgBox "スペースしか入力されてません" End If ■半角英数のみ入力 まず、テキストボックスのプロパティの、 IMEModeを「オフ固定」にしておく。 テキストボックスのKeyPressイベントで Private Sub Text1_KeyPress(KeyAscii As Integer) If (KeyAscii >= Asc("A") And KeyAscii <= Asc("z")) Or _ (KeyAscii >= vbKey0 And KeyAscii <= vbKey9) Or _ (KeyAscii = vbKeyBack) Then Else KeyAscii = 0 End If End Sub
お礼
IMEMode使うだけでもうまくいきました。ありがとうございました。
- otto0001otto
- ベストアンサー率25% (64/249)
Trim関数を使ったらいかがでしょうか? Dim A As String Dim B As String A = Text1.Text B = Trim(A) If Len(A) > 0 And Len(B) = 0 Then MsgBox "スペースのみです" End If 全角チェックはリンクを。
お礼
参考にさせてもらいます。
お礼
ありがとうございました。