> コードではなく、MaxLengthが絡むと駄目なようです。 > 試したのは以下のコードです。 > ROFM上にTextBoxとボタンを配置します。 > TextBoxの方のMaxLenght=5とし、「12345」→ENTERとすると > 音が鳴った後にフォーカス遷移します。 > MaxLengthはEnterも入力値とみなすんでしょうか? > > Private Sub Text1_KeyPress(KeyAscii As Integer) > If KeyAscii = vbKeyReturn Then 'Enterだったら > SendKeys "{TAB}" 'TABキーに置き換える > KeyAscii = 0 '当イベント内でのEnterキー処理を終了させる > End If > > End Sub
そうですね、MaxLengthのチェックが先に入ってるみたいですね。 半角だけの入力ならMaxLengthを使わず、APIでLimitをつければ ならなくなると思います。
(全角は2バイト、半角1バイトでカウントして制限かけるので VBのMaxLengthとは完全には置き換えられませんが。)
Option Explicit
Private Const EM_LIMITTEXT As Long = &HC5 Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" ( _ ByVal hwnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ lParam As Any _ ) As Long
Private Sub SetTextBoxLimitText(objText As TextBox, nLen As Long) Call SendMessage(objText.hwnd, EM_LIMITTEXT, nLen, ByVal 0&) End Sub
Private Sub Form_Load() Call SetTextBoxLimitText(Text1, 5) Call SetTextBoxLimitText(Text2, 10) End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Call SendKeys("{TAB}") KeyAscii = 0 End If End Sub
Private Sub Text2_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Call SendKeys("{TAB}") KeyAscii = 0 End If End Sub
|