|
こんばんは。
このExitイベントって、使いづらいイベントですよね!
帯に短し、襷に長しじゃなく、襷にも短し?
・neptuneさんのように仕様を思い切って変更するのも一案です。
・「条件に合うコードを入力する以外抜けられない状態になる」を仕様にする。
>ある意味不具合が発生してしまいます
とおっしゃっていますが、MS社のように正々堂々と仕様だと言い切る・・・。
↑これ、結構、真面目に言っています。
(私は、値切られた仕事ではこの程度のことは仕様だと言い切ります)
・独自イベントを作成して、コマンドボタンのクリックを可能にする。
これも一案ですが、アクティブなコントロールを監視しなければならない。
動作が不安定・・・・。
・仕様を変更するPART2
例
新規ブックで試してください。
ユーザーフォーム(Userform1)に
テキストボックス(Textbox1)----7桁の数字入力用 必須入力
テキストボックス(Textbox2)----データ入力用
テキストボックス(Textbox3)----データ入力用
コマンドボタン(Commandbutton1)--入力内容クリア用
の4つのコントロールを配置します。
(コントロールのTabオーダーも上記の記述順序です)
標準モジュールに
'====================================================
Sub main()
UserForm1.Show
End Sub
Userform1のモジュールに
'============================================================
Private Sub TextBox1_Enter()
txtenbl = False
End Sub
'============================================================
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
With TextBox1
If KeyCode = 13 Then
If (Len(.Text) <> 7) Or (IsNumeric(.Text) = False) Then
KeyCode = 0
Else
txtenbl = True
End If
End If
End With
End Sub
'============================================================
Private Sub CommandButton1_Click()
Dim idx As Long
For idx = 1 To 3
Controls("textbox" & idx).Text = ""
Next
TextBox1.SetFocus
End Sub
'============================================================
Property Let txtenbl(ByVal enbl As Boolean)
Dim idx As Long
For idx = 2 To 3
Controls("textbox" & idx).Enabled = enbl
Next
CommandButton1.Enabled = False
CommandButton1.Enabled = True
End Property
として、mainを実行してみてください。
Textbox1には、7桁の数字を入力して、Enterキーを押さないと
次のTextbox2には、移動できません。
(7桁の数字を入力してもEnterキー押さないと移動は不可)
しかし、コマンドボタンのクリックは可能です。
これも一つの案です。
検討してみてください。
|
|