• ベストアンサー

エクセルvbaでフレーム上のカレンダーコントロール

エクセルvbaでユーザーフォームの中のフレーム上にカレンダーコントロール をデフォルト非表示で配置しています。ボタンをクリックするとカレンダを表示状態にして、 日付をクリックしたらその値をテキストボックスに表示してカレンダの 表示を消すというコードを作りました。以下がそのコードです。 Private Sub 表示ボタン_Click() cldCalendar.Visible = True cldCalendar.SetFocus End Sub Private Sub cldCalendar_Click() With cldCalendar テキストボックス1 = .Value テキストボックス1.SetFocus .Visible = False End With End Sub このコードだとカレンダーの日付をクリックしない限り、 ずっとカレンダは表示されたままになってしまいます。 カレンダからフォーカスが移った時非表示にしたいのですが、どうすればよいのでしょうか? また非表示にしたいのは、フォーム上の特定のオブジェクトをクリックしたときだけではなく、 フォーム上の何もない場所など、とにかくカレンダ以外のすべてにおいてクリックしたり、 フォーカスが移動したらカレンダを非表示にしたいのです。 注文が細かくて恐縮なのですが、どなたか詳しい方教えてください。

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

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

こんばんは。 カレンダ・オブジェクトは、場所をとるからというのは分かるのですが、実際に、どの程度で満足していただけるのか、分からないので回答を付けづらいものがありますね。 あまり、思ったとおりではないかもしれません。 Private Sub cldCalendar_Exit(ByVal Cancel As MSForms.ReturnBoolean) 'カレンダ・オブジェクトから抜けたとき  cldCalendar.Visible = False End Sub Private Sub UserForm_Click() 'ユーザーフォーム自身をクリック(トグル)  cldCalendar.Visible = Not cldCalendar.Visible End Sub コントロールの数が少なければ、全部に取り付けてしまっても良いかもしれません。

50000
質問者

お礼

教えてくださったコードと以下のフレームをクリックしたときのコードで カレンダが別の場所をクリックしたとき消えるようになりました。 Private Sub frame_Click()  cldCalendar.Visible = Not cldCalendar.Visible End Sub 助けていただいてありがとうございました。

その他の回答 (1)

  • marbin
  • ベストアンサー率27% (636/2290)
回答No.1

UserForm_MouseMove ユーザーフォーム上のコントロールがないところでマウス が動いたらイベントが起動します。 イベントを使ってはいかがでしょう? もしカレンダーコントロールが表示されていたら、ということで 条件分岐します。

50000
質問者

補足

マウスを動かしたときにではなく、どこか別の場所をクリックしたときに 表示を消す方法を探しています。

関連するQ&A