• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセル2003 ユーザーフォームにてフォーカスの有無の判断)

エクセル2003 ユーザーフォームで日付を入力する方法

このQ&Aのポイント
  • エクセルのユーザーフォームを用いて、日付を入力するテキストボックスについての質問です。異なる日付を入力するテキストボックスにフォーカスを合わせる方法について教えてください。
  • 日付を入力するテキストボックスが2箇所あり、カレンダーをクリックしたときにフォーカスがある方のテキストボックスに日付を入力したいと考えています。フォーカスの判断方法について教えてください。
  • Private Sub Calendar1_Click()の中で、フォーカスがあるテキストボックスに日付を入力するコードを書きたいのですが、書き方が分からず困っています。詳しい方法を教えてください。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 >カレンダーをクリックしたときに、フォーカスの在る方に入力する形を考えています。 前にフォーカスしていたものを対象と選択するという書き方自体は、どうしても、Calendar のValue のクリックの時のロスが出るような気がしますので、対策をしておかないといけません。本来は、逆(TextBoxのフォーカスからCalendarのValue のインポート)のような気がしてくるのですが。(^^; それはおいといて、 UserForm_Intialize で、片方のTextBox をTabIndex を1にしておくか、予め、BeforeControl の変数に、どちらかのTextBox の名前をデフォルトにして入れておくことをお勧めします。そうしないと、空打ちが出てしまいます。 Private BeforeControl As String Private Sub Calendar1_Click()  Me.Controls(BeforeControl).Value = Me.Calendar1.Value End Sub Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)  BeforeControl = ActiveControl.Name End Sub Private Sub TextBox4_Exit(ByVal Cancel As MSForms.ReturnBoolean)  BeforeControl = ActiveControl.Name End Sub

tmgolf
質問者

お礼

いつもご回答ありがとう御座います。 おかげさまで、望む動きができました。 No1さんのご回答を参考に、いろいろ考えて、exitイベントで 何とかできないかと考えていたのですが、前のオブジェクトを どうやって渡したらよいか行き詰っておりました。こういう形で 変数に残しておく方法がとても参考になりました。 beforcontrolにはintialize時にtextbox4を与えておきます。 ありがとうございます。

その他の回答 (1)

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

通常はActiveControlプロパティを使います  ActiveControl.Name でフォーカスがあるコントロールの名前を取得できます。 ただこの質問の場合 ActiveControl.Name は Calendar1 になる可能性がありそうです。 Private Sub UserForm_Initialize()  Me.Calendar1.TakeFocusOnClick = False End Sub を記述しておく必要があるかもしれません。

tmgolf
質問者

補足

ご回答ありがとうございます。 ActiveControl.Nameでフォーカスのコントロールの 名前を取得できるのですね。ありがとうございます。 ただ、ご回答頂いたとおり、 ActiveControl.Name だけですと、calendar1になってしまいました。 そこで、 Private Sub UserForm_Initialize()  Me.Calendar1.TakeFocusOnClick = False End Sub を記述したのですが、 実行時エラー438 このオブジェクトは、このプロパティーまたは メソッドをサポートしてません と出ました。 フォーカスをキャンセルさせるのにカレンダーオブジェクトでは 無理なようなのですが。 ご回答頂いた内容を参考に他にやり方が無いか、もう少し考えて 見ます。 ありがとうございます。

関連するQ&A