MS Access Tips/Sample and VBA and Blog customize etc...

カレンダー形式のスケジュール管理フォーム作成 その2

前回に続いて、今回は祝日を赤字表示、ポップヒントに祝日名が表示されるようにします。また、クリックしたラベルの背景色を変更して、その日付をテキストボックスに表示するようにします。クリックした日付が選択されているという意味をあらわします。

FrmCalendar8.png

難易度:

祝日を表示するには、祝日を登録するテーブルを用意しておいてそれを参照するという方法も考えられますが、以前の記事 レポートでカレンダー形式表示 でも利用した AddinBox さんの VB/VBA 用祝日判定コード を今回も使います。これは関数で日付から祝日名を返してくれますのでテーブルに登録する手間が省けます。

上記のサイトから【 VB/VBA 用祝日判定コード 】 をコピーして標準モジュールに貼り付けます。前回の記事のフォームモジュールの「カレンダー 日にち設定関数」を下記のように変更します。

これで、日にちの文字色が日曜と祝日は赤、土曜は青になります。また、祝日の日にちのラベル上にマウス ポインタを置くと祝日名がポップヒントに表示されます。

FrmCalendar7.png

カレンダーの右にテキストボックスを配置します。名前は、txtDate とします。T1~T42 のラベルをクリックしたら、ここに日付を表示させるようにします。また、クリックしたラベルの背景色を白に変更します。例えば、T1 の場合なら、クリック時のイベントプロシージャは下記のようになります。

背景色の変更は、上では背景スタイルの変更で行っています。また、If文は既に変更されているラベルの背景を元に戻すコードです。

このコードを42個すべてのラベルのイベントプロシージャに設定するのは面倒ですね。そこで、共通関数化します。上記のイベントプロシージャを下記ように変更します。

これで、ラベルのクリック時のプロパティ欄に

=SetDate(1)

と記述すれば関数が実行されます。数字部分はラベル名の数字部分です。これも手作業では大変なので、フォームの開くときにVBAで設定するようにします。前回の記事のフォームの開くときのプロシージャを下記のように変更します。

これで、一端保存して、フォームを開いてラベルをクリックしてみてください。背景色が変わり、クリックした日付がテキストボックスに表示されるのを確認してください。

このままでは、月移動ボタンをクリックしたとき txtDate の日付とずれが出ますので、それを設定し直すコードが必要になります。また、フォームを開いた直後は現在の日付が選択された(背景色が白)状態で開くようにするコードも追加します。これらを考慮して最終的にはフォームモジュールは下記のようなコードになりました。

最終コード

これで月移動ボタンで月を変更しても txtDate の表示とカレンダーの日付選択も追随します。

注意: 動作確認するときは、一旦デザインビューを閉じてから、フォームを開いて確認してください。デザインビューからフォームビューに切り替えるとエラーがでます(フォームを開くときに各変数の初期化をしていますが、それができない為)。

今回はここまで。次回は、スケジュールを格納するテーブルを作成して、テーブルのデータをカレンダーに表示できるようにします。
カレンダー形式のスケジュール管理フォーム作成 その3

サンプルファイルが下記からダウンロードできます。
FrmCalendar2_07.zip (Access 2007-2010 形式 - 36kb)
FrmCalendar2.zip (Access 2002-2003 形式 - 51kb)
FrmCalendar2_2k.zip (Access 2000 形式 - 47kb)

拍手する

8 Comments

Beginner says..."教えてください"

スクールの予約管理をしています。

Access2003で予約管理をやっていますが、
カレンダー表示のフォームを作成したいと悪戦苦闘しております。
未熟者ですがよろしくお願いします。

上記は1日1つの予定(記入欄)でありますが、
そこを、部屋数がA・B・C 3部屋あり、時間帯が、午前・午後1・午後2・夜 と分かれておりますので、1日 計12枠の予約が入力出来るようにしたいのです。

ぜひご回答よろしくお願いします。



2010.01.08 23:08 | URL | #D2.HeQfE [edit]
hatena says..."Beginnerさん、はじめまして。"

次の記事「その3」では、一日に複数の予定を登録できるようになっています。
内容が理解できれば、それをたたき台にして、修正・追加していけば希望の実現は可能だと思います。
ただし、かなりの工数を必要とするとは思いますが。
頑張ってください。
コード内容で不明な点があれば具体的に質問していただければ、回答します。

2010.01.09 00:46 | URL | #- [edit]
Beginner says...""

ありがとうございます。
やってみます。

2010.01.09 08:56 | URL | #D2.HeQfE [edit]
minami says...""

hatena様
度々申し訳ありません。上記の「最終コード」までやって来ました。
それで、フォームビューで日や 月をかえるコマンドボタンをクリックすると
エラーメッセージで
「イベントプロパティに指定した式 クリック時でエラーが発生しました:指定した式で参照されている'T-151'フィールドが見つかりません」と出ます。
お手数ですが、解決策をお教えいただけませんでしょうか?何卒、よろしくお願いいたします。

2015.12.01 23:49 | URL | #- [edit]
hatena says..."re:エラー"

デザインビューからフォームビューに切り替えて動作確認してませんか。
デザインビューを一旦閉じてから、フォームビューで開いてみてください。

2015.12.02 00:13 | URL | #5uE6dEgY [edit]
minami says...""

hatena様
すみません、お手数をお掛けいたします。良く見てみましたら、
'カレンダー 日にち設定関数の記述の箇所で

  Me.年 = Year(Me.txtDate)
 Me.月 = Month(Me.txtDate)

 が抜けていました。これを記述すると動くようになりました。

ありがとうございました。次のステップに進ませていただきたいと思います。
お忙しいところありがとうございました。

2015.12.02 09:06 | URL | #- [edit]
minami says..."カスタマイズしたい"

hatena様
Win7,Access2013
いつも、ご回答をくださりありがとうございます。ここでお示しされておられるカレンダーを作成して活用を始めたところです。(初心者の知識です)
このカレンダーを会社行事として活用し他のスタッフが社内ネットワークで確認できるようにしています。
件名と予定が複数ある日もあり、予定をテーブルからデータシートビューフォームを作成してで入力するようにしています。そこで
■日をクリックしたら、その日の予定がデータシートビューで現れるように出来たら良いと思っています。(カレンダーのそばには予定は置かず)
お手数ですが、どこにどのように記述すれば良いか、お教えいただけませんでしょうか。
■hatena様のカレンダーはバックグラウンドに色(茶)が付いていますが、
自分が作らせていただいたものには色は無く、白一色です(原因不明)
・しかし、このカレンダーでは当該月の日にちのみ色づきにしたいと希望しています(同じ月の画面で当該月だけ見やすくしたいためです)。
こちらのほうも、お手数ですがお示しいただくとありがたいと思います。
以上、何卒よろしくお願いいたします。


2015.12.06 23:00 | URL | #- [edit]
says..."承認待ちコメント"

このコメントは管理者の承認待ちです

2016.02.25 22:41 | | # [edit]

Leave a reply






Trackbacks

trackback URL
http://hatenachips.blog34.fc2.com/tb.php/187-7e78800c
該当の記事は見つかりませんでした。