- ベストアンサー
エクセル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 このコードだとカレンダーの日付をクリックしない限り、 ずっとカレンダは表示されたままになってしまいます。 カレンダからフォーカスが移った時非表示にしたいのですが、どうすればよいのでしょうか? また非表示にしたいのは、フォーム上の特定のオブジェクトをクリックしたときだけではなく、 フォーム上の何もない場所など、とにかくカレンダ以外のすべてにおいてクリックしたり、 フォーカスが移動したらカレンダを非表示にしたいのです。 注文が細かくて恐縮なのですが、どなたか詳しい方教えてください。
- みんなの回答 (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 コントロールの数が少なければ、全部に取り付けてしまっても良いかもしれません。
その他の回答 (1)
- marbin
- ベストアンサー率27% (636/2290)
UserForm_MouseMove ユーザーフォーム上のコントロールがないところでマウス が動いたらイベントが起動します。 イベントを使ってはいかがでしょう? もしカレンダーコントロールが表示されていたら、ということで 条件分岐します。
補足
マウスを動かしたときにではなく、どこか別の場所をクリックしたときに 表示を消す方法を探しています。
お礼
教えてくださったコードと以下のフレームをクリックしたときのコードで カレンダが別の場所をクリックしたとき消えるようになりました。 Private Sub frame_Click() cldCalendar.Visible = Not cldCalendar.Visible End Sub 助けていただいてありがとうございました。