|
おはようございます。
>テストの結果、1つだけのTextBoxからの入力はできない事に気付きました。
>文字入力後、Enterを押しても、次の移動先項目が無いため[AfterUpdate]とならないのではないか?と推測していますが、回避方法(TextBox1つだけの場合の入力方法)をどなたかご教示お願いできませんでしょうか。宜しくお願いします。
他にフォーカスが移るコントロールがない場合、対象テキストボックスの入力終了が確認できる仕様にしなければなりませんね!!
例1
入力確定のコマンドボタンを設けて、ここにAfterUpdateイベントに記述した
コードを記述する という仕様に変更する。
例2
他にフォーカスが移るコントロールがないのですから、Keydownイベントで
判断する。
新規ブックにて、ユーザーフォーム(Userform1)に
Textbox1(テキストボックス)
Commandbutton1〜CommandButton4(4つのコマンドボタン)
を配置してください(TabIndexも上記の順序とします)。
Userform1のモジュールに
'==========================================================
Option Explicit
'==========================================================
Private Sub CommandButton1_Click()
cbtn 1
End Sub
'==========================================================
Private Sub CommandButton2_Click()
cbtn 2
End Sub
'==========================================================
Private Sub CommandButton3_Click()
cbtn 3
End Sub
'==========================================================
Private Sub CommandButton4_Click()
cbtn 4
End Sub
'==========================================================
Private Sub TextBox1_Enter()
Dim g0 As Long
For g0 = 1 To 4
Controls("commandbutton" & g0).Enabled = False
Next
End Sub
'==========================================================
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Dim g0 As Long
If KeyCode = 13 Then
With TextBox1
If IsNumeric(.Value) Then
If Val(.Value) = 1 Then
CommandButton1.Enabled = True
CommandButton2.Enabled = True
ElseIf Val(.Text) = 2 Then
CommandButton3.Enabled = True
CommandButton4.Enabled = True
Else
KeyCode = 0
End If
Else
KeyCode = 0
End If
End With
End If
End Sub
'==========================================================
Sub cbtn(id As Long)
MsgBox id
End Sub
上記の例では、
Textbox1に1が入力されEnterキーが押されると、
Commandbutton1、Commandbutton2が使用可能になり、
Textbox1に2が入力されEnterキーが押されると、
Commandbutton3、Commandbutton4が使用可能になります。
AfterUpdateを選択した理由があるのでしょうから、
Keydownイベントではまかないきれない箇所はあります。
(移るコントロールが存在する場合、Keydownイベントではマウスを使った移動では、
イベントが発生しない等)。
その場合、上記のふたつのイベントを組み合わせる方法も考えられますが、
入力コードが複雑になってしまいますね!!
例3
例2のUserform1の仕様で既定値をEnabled=True(Commandubutton1〜Commandbutton4)に設定しておく。
Exitイベントを使って、条件によって、使用不可にボタンを設定する
Option Explicit
'==========================================================
Private Sub CommandButton1_Click()
cbtn 1
End Sub
'==========================================================
Private Sub CommandButton2_Click()
cbtn 2
End Sub
'==========================================================
Private Sub CommandButton3_Click()
cbtn 3
End Sub
'==========================================================
Private Sub CommandButton4_Click()
cbtn 4
End Sub
'==========================================================
Private Sub TextBox1_Enter()
Dim g0 As Long
For g0 = 1 To 4
Controls("commandbutton" & g0).Enabled = True
Next
End Sub
'==========================================================
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim g0 As Long
With TextBox1
If IsNumeric(.Value) Then
If Val(.Value) = 1 Then
CommandButton3.Enabled = False
CommandButton4.Enabled = False
ElseIf Val(.Text) = 2 Then
CommandButton1.Enabled = False
CommandButton2.Enabled = False
Else
For g0 = 1 To 4
Controls("commandbutton" & g0).Enabled = False
Next
End If
Else
For g0 = 1 To 4
Controls("commandbutton" & g0).Enabled = False
Next
End If
End With
End Sub
'==========================================================
Sub cbtn(id As Long)
MsgBox id
End Sub
この場合も、AfterUpdateとExitイベントの仕様の違いを検討をしてみてください。
|
|