Excel VBA質問箱 IV

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

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


4172 / 13646 ツリー ←次へ | 前へ→

【58066】TextBox1に即、再入力したい ぴかる 08/10/1(水) 9:16 質問[未読]
【58067】Re:TextBox1に即、再入力したい Jaka 08/10/1(水) 10:07 発言[未読]
【58068】Re:TextBox1に即、再入力したい kanabun 08/10/1(水) 10:24 発言[未読]
【58069】Re:TextBox1に即、再入力したい ichinose 08/10/1(水) 10:51 発言[未読]
【58073】Re:TextBox1に即、再入力したい ぴかる 08/10/1(水) 14:15 お礼[未読]

【58066】TextBox1に即、再入力したい
質問  ぴかる  - 08/10/1(水) 9:16 -

引用なし
パスワード
   TextBox1に日付入力するユーザーフォームを作成し、以下の様なマクロとしています。日付以外を入力すればエラー処理となるのですが、今の状態ではTextBox1をクリックしないと再入力出来ません。これを即入力出来る様にしたいと思っています。よろしくお願い致します。

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  
  On Error GoTo エラー処理
  If KeyCode = vbKeyReturn Then
    読出日付 = CDate(TextBox1.Value)
  End If

Exit Sub

エラー処理:
  MsgBox "きちんと日付入力してネ(^^)", vbInformation, "【 ダメだよ 】"
  KeyCode = 0
  With TextBox1
    .SetFocus
    .Value = ""
  End With

End Sub

【58067】Re:TextBox1に即、再入力したい
発言  Jaka  - 08/10/1(水) 10:07 -

引用なし
パスワード
   数字以外を入力すると希望どおりに動きました。
win2000SP4 & EXCL2002SP3
単に日付の判定が簡素すぎるだけなのでは?

【58068】Re:TextBox1に即、再入力したい
発言  kanabun  - 08/10/1(水) 10:24 -

引用なし
パスワード
   ▼ぴかる さん:
 こんにちは。

>日付以外を入力すればエラー処理となるのですが、
>今の状態ではTextBox1をクリックしないと再入力出来ません。

原因は
>エラー処理:
>  MsgBox "きちんと日付入力してネ(^^)", vbInformation, "【 ダメだよ 】"

MsgBoxを表示しているからですね。
MsgBoxを表示すると、MsgBoxから戻ってきたとき、Focusがどこかへ吹っ飛んで
しまいます。
MsgBoxの行をコメントアウトして確かめてください。

対策は(自分的には ^^)

音で知らせるだけにする (Beep) とか、

UserForm内MsgBoxを自作する
具体的には
 普段は非表示のラベル(あらかじめ Captionに
  "きちんと日付入力してネ(^^)" と書き入れておいた )をTextBoxの上に
 表示し、ラベルがClickされたら、非表示にし、TextBoxに SetFocusする
とか
  同じように、MsgBox風の[OK]ボタンと[Cancel]ボタンを配置した 非表示Frame
  を作っておいて、エラーのとき、TextBoxの上にこれを表示する

などで、対応しています。

でも、TextBoxのKeyDownイベントで [Enter]キーの押下を監視するって、
どうなんでしょ?
Exitイベントなどでチェックできませんかね?

【58069】Re:TextBox1に即、再入力したい
発言  ichinose  - 08/10/1(水) 10:51 -

引用なし
パスワード
   ▼ぴかる さん:
おはようございます


>TextBox1に日付入力するユーザーフォームを作成し、以下の様なマクロとしています。日付以外を入力すればエラー処理となるのですが、今の状態ではTextBox1をクリックしないと再入力出来ません。これを即入力出来る様にしたいと思っています。よろしくお願い致します。

これ、モードレスモードで表示した時の現象ですよね?
モーダルでは、Jakaさんのいうとおり、正常にフォーカスが作動します。


>
>Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
>  
>  On Error GoTo エラー処理
>  If KeyCode = vbKeyReturn Then
>    読出日付 = CDate(TextBox1.Value)
>  End If
>
>Exit Sub
>
>エラー処理:
>  MsgBox "きちんと日付入力してネ(^^)", vbInformation, "【 ダメだよ 】"
>  KeyCode = 0
>  With TextBox1
    .Visible = False
   ' DoEvents
    .Visible = True
'こんなの入れてみると、正常にフォーカスされました。
>    .SetFocus
>    .Value = ""
>  End With
>
>End Sub


Excel2002 SP3で確認

【58073】Re:TextBox1に即、再入力したい
お礼  ぴかる  - 08/10/1(水) 14:15 -

引用なし
パスワード
   Jakaさん、kanabunさん、ichinoseさん、こんにちは。

みなさんのおっしゃる通りの現象でした。誠にありがとうございました。
今回は、ichinoseさん案が希望通りのものとなりました。
今後ともアドバイスよろしくお願いします。

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