• ベストアンサー

フォームのテキストボックス内での処理

●VB6.0を使用しているのですが、テキストボックスで全角スペースのみ又は半角スペースのみの入力をした時msgboxでエラー処理するにはどうしたらいいのでしょうか? ●またテキストボックスで半角英数しか入力できないようにする処理があれば教えていただけますか?

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

  • ベストアンサー
  • piyo2000
  • ベストアンサー率49% (144/293)
回答No.3

#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

DINO-PIE
質問者

お礼

ありがとうございました。

その他の回答 (4)

noname#22222
noname#22222
回答No.5

・全半角ブランクのみか否かは入力終了後でないと不可ではないでしょうか? ・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

DINO-PIE
質問者

お礼

ありがとうございました。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

特に後半の質問について(前半も同じ考えでできると思う) テキストボックスのイベントで 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文字ずつコードを調べて、不許可の文字があれば全体不許可にするよりほかないのかも知れない。

DINO-PIE
質問者

お礼

ありがとうございます。参考にさせてもらいます。

回答No.2

■スペースのチェック 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

DINO-PIE
質問者

お礼

IMEMode使うだけでもうまくいきました。ありがとうございました。

回答No.1

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 全角チェックはリンクを。

参考URL:
http://hpcgi1.nifty.com/MADIA/VBBBS/wwwlng.cgi?print+200402/04020054.txt
DINO-PIE
質問者

お礼

参考にさせてもらいます。

関連するQ&A

専門家に質問してみよう