Accessでの日付入力はシステムごとに若干違うことがありますよね?デートピッカーで統一できそうですが実はそうでもないんです。私が直面した問題点はデートピッカーで選択した日付がその直後だけイベントで取得できない!ということでした。その内容と解決方法をご紹介します。
現象
(Access 2009 での場合で記述してます。バージョンで挙動ちがうかも)
テキストボックスにデートピッカーを設置する
テキストボックスの書式を日付にするとビルドインのカレンダで日付を入力することができます。実務では便利なデートピッカーです。
テキストボックス横に小さなカレンダーが表示され、クリックするとこのようなデートピッカーが表示されます。
日付をデートピッカーから選択すると!問題発生!
変更後イベントで、デートピッカーからセットされた日付をVBAで取得しようとすると表示された日付が取得できません。
変更時イベントでセットされた日付を取得してもその値は変更されていません。
元々2020/11/07だった日付をデートピッカーで2020/11/14を選択してテキストボックスの変更後イベントにメッセージボックス表示ロジックを付けて表示させた結果が下の図になります。
簡単な解決策
- デートピッカーで日付選択後に一度フォーカスを移動させる。
- Refreshしてからテキストボックスの内容を取得する。
ワンクッション入れればいいのですが、入力時にワンテンポ遅れると気持ち悪いのでなんとかしたいものです。
より有効な解決策
標準のデートピッカーを仕様しないというのが解決策になります。自作のカレンダーを作ることになります。この実装はネットを検索するとロジックや画像の素材等もいっしょに解説しているサイトがありますので参考にした自作します。
デートピッカーの仕様確認
デートピッカーはテキストボックス等のコントロールに日付を渡しますが、日付貼り付け直後はtextプロパティーは変更するがvalueプロパティーは変更しない仕様だそうです。(昔から)
デートピッカーは日付選択直後は紐つくコントロールのtextプロパティーは変更するがvalueプロパティーは変更されない。
コメント