|
▼亜矢 さん:
> If MsgBox("入力エラーです.再入力しますか?", vbOKCancel) = vbOk then
> Textbox25=""
> Cancel = True
> Else
> Exit Sub
> End If
> にしましたが、再入力をしますでTextboxのデータを削除しますが、
>Textboxにフォーカスが移りません。
失礼しました。
MsgBoxを表示したとたん、Focusが失われるようです。
再入力するか/再入力をCancelするか をMsgBox風に選んで分岐するようにする
となると、
MsgBoxを自作することしか、ぼくには思いつきませんでした。
非常にいまいちな方法ですが、いちおう紹介しますと、、、、
UserFormに Frame を追加します。(Frame1 とします)
Frameのなかに
◆Label Caption は "入力エラーです.
再入力しますか?" とします。
◆CommandButton (名前は bInputOK ) --- MsgBoxの[OK]ボタンの替わり
◆もうひとつCommandButton
(名前は bInputCancel )--- MsgBoxの[Cancel]ボタンの替わり
FrameのVisibleプロパティは False にしておきます。
で、対象のTextBoxが TextBox1 という名前だとすると、
以下のようなプロシージャコードをUserFormモジュールに追加してください。
'------------------------------------------
Private Sub TextBox1_Enter()
NoControl = False
End Sub
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If NoControl Then Exit Sub '再入力Cancelモードのときは再チェックしない
With TextBox1
If .Text > Day(Date) Then '← ここにあなたの入力値 _
チェック条件を書いてください
With Frame1 '自作MsgBoxを表示します
.Top = TextBox1.Top
.Left = TextBox1.Left
.Visible = True
End With
End If
End With
End Sub
Private Sub bInputCancel_Click()
Frame1.Visible = False
NoControl = True
CommandButton1.SetFocus '← ここをTextBox1のExitイベントが _
発生したときにClickされたControl に直してください
End Sub
Private Sub bInputOK_Click()
Frame1.Visible = False
NoControl = True
With TextBox1
.Text = ""
.SetFocus
End With
End Sub
※とりあえず、MsgBoxの代替手段で Focus を維持するには
こんな方法しか思いつきませんでした。
どうもすみません m(__)m
|
|