• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:間違った入力をした時、もう一度入力させる場合)

間違った入力をした時、もう一度入力させる場合

このQ&Aのポイント
  • textbox1の文字数が8文字以外のときは、もう一度textbox1に戻って来るようにする方法について解説します。
  • 入力のためのuserformを消す際に、正しい日付を入力してくださいというメッセージが表示される問題についても対策方法を紹介します。
  • 改良方法としては、TextBox1_Exitイベント内で条件分岐を行い、文字数が8文字以外の場合はメッセージボックスを表示し、キャンセルフラグを立てるようにします。その後、TextBox1.SetFocusメソッドを使用してフォーカスをTextBox1に戻します。また、userformを消す際には、TextBox1_Exitイベント内のコードを一時的に無効化することでメッセージボックスの表示を回避することができます。

質問者が選んだベストアンサー

  • ベストアンサー
  • kootsuki
  • ベストアンサー率54% (6/11)
回答No.2

>リターンを押した直後に、textbox1ですぐ入力待ちにすることは >出来ないでしょうか? テストではMsgboxが表示され[OK]を押すと入力していた最後の位置にカーソルがあり入力可能となっていました。それでいいのかと思っていましたが、ご要望は[OK]を押した後は、Textbox1の入力していた文字を反転させて1文字目からの再入力ができて欲しいというもののようですね。以下のコーディングで如何でしょうか。 Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) If UserForm1.Visible = True Then If Len(TextBox1) <> 8 Then MsgBox ("正しい日付を入力してください。") TextBox1.SelStart = 0 TextBox1.SelLength = Len(TextBox1.Value) Cancel = True Exit Sub End If End If End Sub SelstartとSellengthで選択状態(反転状態)にしています。UserForm1はそちらのフォーム名にしてください。 なお、No1の回答で以下のコーディングを入れてもらいましたが、これらは削除してください。Userformを×で終わらせたとき、まずUserformが非表示になります。その状態を見るようにしました。この方がスマートかと思います。あっ、前の回答 End If がひとつ多かったようですね。済みませんでした。 Private formexit As String Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) formexit = "yes" End Sub

masatoji
質問者

お礼

ありがとうございます。 大変、助かりました。またお聞きすることがあるかもしれませんが、今後ともよろしくお願い致します。 失礼致します。

その他の回答 (1)

  • kootsuki
  • ベストアンサー率54% (6/11)
回答No.1

>また、この入力のためのuserformを消す際にも、 >MsgBox ("正しい日付を入力してください。")が表示されてしまいます。 についてです。 マウスがそのテキストボックスに乗っている場合は、Userfoemのクローズの際にTextBox1_Exitのイベントが発生しているようです。コードの中でフォームクローズ時ということを認識できればいいのですが、でき無さそうだったので、安直ですが、userformを消したことを認識してその場合は8文字チェックをやめる方式の提案です。 コードの先頭に、 Private formexit As String 別イベントとして、 Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) formexit = "yes" End If End Sub ここでフォームのクローズを覚えておきます。 最後に元のコードに手を入れて、 Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)  If formexit <> "yes" Then   If Len(TextBox1) <> 8 Then    MsgBox ("正しい日付を入力してください。")    Cancel = True    Exit Sub   End If  End If End Sub もうひとつの「しかしながら、うまくtextbox1に戻ってくれません。」の方は再現しません。一度エラーになるとtextbox1から抜けられないと思うのですが・・・。

masatoji
質問者

補足

早速、回答いただきましてありがとうございます。 おかげで >また、この入力のためのuserformを消す際にも、 >MsgBox ("正しい日付を入力してください。")が表示されてしまいます。 の件につきましては、うまく処理できました。 しかし、MsgBoxを閉じた(リターンキーを押した)後、もう一度テキストボックス1へ戻ってくれず、どこも反転していない状態になってしまいます。(左クリックをすれば、その場近くにカーソルがいるので、入力できるのですが…。) リターンを押した直後に、textbox1ですぐ入力待ちにすることは出来ないでしょうか? わがまま言ってしまいますが、よろしくお願い致します。

関連するQ&A

専門家に質問してみよう