| 
    
     |  | おはようございます。 
 >テストの結果、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イベントの仕様の違いを検討をしてみてください。
 
 |  |