重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

エクセル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

このコードだとカレンダーの日付をクリックしない限り、
ずっとカレンダは表示されたままになってしまいます。
カレンダからフォーカスが移った時非表示にしたいのですが、どうすればよいのでしょうか?
また非表示にしたいのは、フォーム上の特定のオブジェクトをクリックしたときだけではなく、
フォーム上の何もない場所など、とにかくカレンダ以外のすべてにおいてクリックしたり、
フォーカスが移動したらカレンダを非表示にしたいのです。
注文が細かくて恐縮なのですが、どなたか詳しい方教えてください。

A 回答 (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

コントロールの数が少なければ、全部に取り付けてしまっても良いかもしれません。
    • good
    • 0
この回答へのお礼

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

助けていただいてありがとうございました。

お礼日時:2009/01/30 15:42

UserForm_MouseMove


ユーザーフォーム上のコントロールがないところでマウス
が動いたらイベントが起動します。

イベントを使ってはいかがでしょう?
もしカレンダーコントロールが表示されていたら、ということで
条件分岐します。

この回答への補足

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

補足日時:2009/01/29 12:49
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!