[[20101231121034]] 『テキストボックスで日付入力』(はせぴぃ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『テキストボックスで日付入力』(はせぴぃ)

Excel2003にて

 VBAのフォーム内のTextboxに日付を入力したいのですが、
カレンダーコントロールをどのように使用すれば
よろしいのでしょうか?

 希望としてはTextbox内にデフォルトで入力日が表示され、
(yyyy/mm/dd)Textboxをクリックするとカレンダーが表示され、
カレンダー内の日付をクリックすると、
Textbox内の日付が変わるようにしたいです。

別にカレンダー専用のフォームを作成しなくてはいけないのでしょうか?


 >VBAのフォーム内のTextboxに日付を入力したい
 ユーザーフォームのテキストボックスに日付を入力したい ということですね!!
 方法は、同じユーザーフォーム内に非表示でカレンダーコントロールを配置しておいて
 必要なときに表示させる という方法。

 >別にカレンダー専用のフォームを作成しなくてはいけないのでしょうか? 
 この二つが考えられますねえ・・・。

 私なら、カレンダー専用のユーザーフォームを作成 にすると思います。

 そのように作っておけば、別の機会に再利用できそうですからね!!

 別のユーザーフォーム(Userform1)には、
 カレンダーコントロールだけを配置します。

 オブジェクト名  UserForm1

 機能      カレンダーコントロールを使って日付を管理する。

 メソッド      show  ----- ユーザーフォームを表示し、カレンダーを表示する

 プロパティ    value    ----  指定された日付を格納します。
                               初期設定日としては、Showメソッドの前に
                               指定します。省略すると、
                               本日の日付が設定されます
                               日付の確定は、ダブルクリックで確定してください
                               ユーザーフォームが閉じます。
                               ユーザーフォームの閉じるボタンをクリックすると
                               ユーザーフォームが閉じますが、valueプロパティ
                               には、Emptyが設定されます
 使用例

 Sub test()
    Load UserForm1
    With UserForm1
       .value = Date - 5 '初期値として、本日より、5日前を指定
       .Show             'カレンダーフォーム表示
       If Not IsEmpty(.value) Then  '日付が指定された?
          MsgBox Format(.value, "yyyy/m/d")
       End If
    End With
    Unload UserForm1     'カレンダーフォームを退避
 End Sub

 上記のコードが正常に作動するようなUserform1を考えて見てください

 ichinose
 

 ichinoseさん、ありがとうございます。

 さっそく、下記のように試してみました。

Sub Private Sub TextBox1_Change()

    Load UserForm1
    With UserForm1
       .value = Date - 5
       .Show
       If Not IsEmpty(.value) Then
          MsgBox Format(.value, "yyyy/mm/dd")
       End If
    End With
    Unload UserForm1
’ 
End Sub

 しかし、うまくいきません。初期値(現在の日付)も表示されません。

 私が勘違いしているのでしょうか?

また、カレンダーコントロールを参照していない(できない)PCでは
こちらはうまく作動しないでしょうか?

                        (はせぴぃ)


 >カレンダーコントロールを参照していない(できない)PCではこちらはうまく作動しないでしょうか? 

 カレンダーコントロールは、Excelの付属コントロールではなく、Accessに付属している
 コントロールですから、
 Accessのない環境では通常は、コントロール自体がインストールされていません。
 コントロール自体がなければ、大前提がひっくり返ります。

 作動しませんし、
 Accessのない環境にこのカレンダーコントロールだけインストールするのは、
 ライセンス違反ですよ!!

 よって、Accessのない環境では、カレンダーコントロールは使えません。

 >私が勘違いしているのでしょうか?
 はい、勘違いしています。
 私が投稿したようなコードで作動するような仕様のUserForm1を
 作成してみてください。 と申し上げただけでUserForm1に関しては、
 ご自分で作成するのですよ!!

 これもライセンスがあればの話ですが、
 カレンダーコントロールには、

 Private Sub Calendar1_DblClick()

 End Sub

 ダブルクリックすると、イベントが発生しますから、上記のプロシジャーに
 ダブルクリック時に、日付が取得できるようなコードを作成するのですよ!!

 この辺りの知識がないのなら、少し研究が必要です。

 また、UserForm1の閉じるボタンクリック時の処理は、
 Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

 End Sub

 というイベントプロシジャー内にコードを作成します。

 これもこれだけで作動するわけではないですよ、中にご自分で仕様にあうような
 コードを作成するのですよ!!

 日付を渡す変数は、このUserForm1のモジュールに

 public value as variant

 と宣言して運用できるように考えてください

 ichinose

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.