Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


26714 / 76738 ←次へ | 前へ→

【55354】Re:TextBoxが1つのユーザフォーム
発言  ichinose  - 08/4/30(水) 7:34 -

引用なし
パスワード
   おはようございます。

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

0 hits

【55344】TextBoxが1つのユーザフォーム よちよち 08/4/29(火) 21:01 質問
【55345】Re:TextBoxが1つのユーザフォーム ponpon 08/4/29(火) 21:30 発言
【55348】Re:TextBoxが1つのユーザフォーム よちよち 08/4/29(火) 22:02 回答
【55350】Re:TextBoxが1つのユーザフォーム ponpon 08/4/29(火) 23:32 発言
【55355】Re:TextBoxが1つのユーザフォーム よちよち 08/4/30(水) 7:53 お礼
【55357】Re:TextBoxが1つのユーザフォーム Yuki 08/4/30(水) 8:35 発言
【55358】Re:TextBoxが1つのユーザフォーム ponpon 08/4/30(水) 13:07 発言
【55436】Re:TextBoxが1つのユーザフォーム よちよち 08/5/4(日) 10:25 お礼
【55354】Re:TextBoxが1つのユーザフォーム ichinose 08/4/30(水) 7:34 発言

26714 / 76738 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free