こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

カレンダーフォームの操作についてヘルプIII

カレンダーフォームの操作についてご指導をお願いします。

Access2007
カレンダーコントロール12.0

やりたいこと

開いたカレンダーコントロールフォーム「フォーム名:カレンダーマスター」の任意の日付にコメントを入力、リアルタイム日付表示状態でメモ確認カレンダーとして使いたい。

やったことと「不具合」

「カレンダーマスター」をデザインビューで開いて「プロパティーシート」その他タブの「ヒントテキスト」行に記入する。しかし、起動時にはカレンダーが本日の日付になていましたが、将来の日付を選択してヒントテキストを入力後にフォーム「カレンダーマスター」へ戻すと、本日の日付に戻らず入力した日付表示で本日の日付に戻りません。入力操作(カレンダーマスター → コメント入力日を選択 → デザインビュー → ヒントテキスト入力 → フォームに戻す)

おねがい

フォーム「カレンダーマスター」を開いた状態でコメントの入力が可能な方法かあればアドバイスをお願いします。可能でなければデザインビューで開いて「ヒントテキスト」行に記入してフォーム「カレンダーマスター」に戻した時に、本日の日付に戻せる方法を教えて下さい。

アドバイスをお願いします。

投稿日時 - 2017-02-06 14:02:23

QNo.9290518

困ってます

質問者が選んだベストアンサー

>「エラーが表示されました」
おそらくスペルの違いでしょう
Private Sub Form_Load()の中身はPrivate Sub Form_Activate()の中身と同じです。
エラーの出てないPrivate Sub Form_Activate()の中身をコピペしてみて下さい。

フォームを開いたとき(Load時は)はActivateでもあるので
Private Sub Form_Load()のモジュールは必要ないようですね削除してもよいかも

フォームのデザインビューでデザインリボンの右側のコードの表示をクリックすると添付のような画面になります。
左の蛍光マークのあるところはボックス等イベントを発生させるリスト、
右の蛍光マークのあるところはイベントのリストです。
左のリストの一つを選び、右のイベントリストの一つを選ぶとPrivateで始まる最初の行と
End Subで終わる最後の行が表示され、この間にコーディングします

投稿日時 - 2017-02-12 23:21:53

お礼

有難うございます。ご面倒をお掛けしました。
道筋を示していただきましたので「自分に足らない知識領域を認識」、ご指導のポイントを確認しながら「知識の蓄積で知識の集約」実現できる様に進めてまいります。物事には「一足飛びには到達できない」ものがあると感じましたので、chayamatiレベル11様に「この件で」これ以上のご面倒はお掛けすることは、失礼あり「私には」出来ません。勝手ながら一旦、締めさせて頂く(わがまま)をお許し下さい。材料は全て揃えていただきましたので、分かる方なら出来て当たり前だと思います。ベストアンサーで締めさせていただきます。ありがとうございました。

投稿日時 - 2017-02-14 05:51:56

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(6)

ANo.5

>「Me.Calendar4 = Date+1(明日)」頂きましたが、何処にどの様に記述すれば実現できるのでしょうか。
前回の回答に追加しますが「Calendar4」とは別名のテキストボックスにします。

Private Sub Form_Load()
Me.Calendar4 = Date 
Me.Calendar3 = Date+1 '翌日 このシングルコーテーション以降はメモ書きです

Me.Calendar2 = Date+7 '1週間後 済みません Date+1 とアドバイスの誤り見付けられましたね
End Sub
Private Sub Form_Activate()
Me.Calendar4 = Date 
Me.Calendar3 = Date+1 '翌日 
Me.Calendar2 = Date+7 '1週間後
End Sub

この機会にメインルーチンとサブルーチンにつて
参考URLによりますと
「サブルーチン(英: subroutine)は、コンピュータプログラミングにおいて、プログラム中で意味や内容がまとまっている作業をひとつの手続きとしたものである。繰り返し利用されるルーチン作業をモジュールとしてまとめたもので、呼び出す側の「主」となるもの(メインルーチン)と対比して「サブルーチン」と呼ばれる。サブプログラム (subprogram) と呼ばれることもある。また、「サブ」をつけずに「ルーチン」と呼ぶこともある。」

とありますが、ここでは
メインルーティン:イベント(きっかけ)で起動する。末尾にイベント名が付加されている。
サブルーチン:他のルーチンより起動する、使用目的は複数ルーチンで同じ処理があったり、ルーチン内の意味的なまとまりを示すためにサブルーチン化し、全体を見易くします。

今回の例では「Private Sub Form_Load()」と「Private Sub Form_Activate()」の内容は同じです。
この同じ内容を「日付初期化RTN」とサブルーチン化します。

Private Sub Form_Load()
日付初期化RTN()
End Sub
Private Sub Form_Activate()
日付初期化RTN()
End Sub

Private Sub 日付初期化RTN()
Me.Calendar4 = Date 
Me.Calendar3 = Date+1 '翌日
Me.Calendar2 = Date+7 '1週間後
End Sub

>docmd.迄入力すると候補のリスト・・・」とありますが、差し支えなければ記入の例をご伝授頂けませんでしょうか。

Private Sub マスタ登録_Click()
DoCmd.OpenForm "マスタ登録"
End Sub
の誤りでした。
前回の参考URL http://www.geocities.jp/cbc_vbnet/kisuhen/docmd.html#gotocontorolの最上行にDocmdの目次があります。このどれかを選ぶと、説明文の次に使用例があります。

参考URL:https://ja.wikipedia.org/wiki/%E3%82%B5%E3%83%96%E3%83%AB%E3%83%BC%E3%83%81%E3%83%B3

投稿日時 - 2017-02-11 15:46:35

補足

chayamati レベル11様へ

単純に現在と明日以降のコメントの入力について、現状のご報告とアドバイスをお願いしたく思います。

1,マスタフォーム「カレンダーコントロールを張付けてある」のプロパティーのイベントタブ「読み込み時」と
「アクティブ時」に以下の書込を致しました。「エラー表示」がでましたのでご報告致します。

「エラー表示はありません」
Private Sub Form_Activate()
Me.Calendar4 = Date
Me.Calendar3 = Date + 1 '明日
Me.Calendar2 = Date + 7 '1週間後
End Sub

「エラーが表示されました」
(コンパイラエラー メソッドまたはデータメンバが見つかりません)との表示があります。
Private Sub Form_Load()※黄色マスクがかかっています。
Me.Calendar4 = Date
Me.Calendar3 = Date + 1 '明日※この部分に青色マスクがかかリます。念の為この部分を削除するとエラーは発生しないようです。
Me.Calendar2 = Date + 7 '1週間後
End Sub

2,予定表の入力について「今日の時点で明日の予定の入力の場合」
マスターフォームをデザインビューで開いてカレンダーコントロールをアクティブにし、明日の日付をクリックの後にその他タブ「名前」を「Calendar3」にしてからヒントテキストに入力するのでしょうか。実際にやってみましたが、入力済の「Calendar4」今日の予定が、明日の予定「Calendar3」で入力した文言と同じになってしまいました。

勘違いの可能性が非常に高い感じ・・・。再度、ご面倒をおかけしますがご指導願います。

投稿日時 - 2017-02-12 08:32:54

ANo.4

2,本日以降の日付への入力「アクティブな状態で明日の日付をクリックし、デザイ
ンフォームにすると本日の日付になる」ができないですが、どこがいけないのでしょ
うか。
・日付の計算はexcelと同じです。
 明日は Me.Calendar4 = Date+1
 1週間後は Me.Calendar4 = Date+1


II、マスタ登録とラベルボックスについて

メニュータブの「ホーム」直下のクリップボード文字横の右下向き「矢印」を選択す
ると「マスタ登録と呼ぶラベルボックスを配置」のアイコンと説明文字が現れました
。クリックするとマスターフォームにラベルが張り付きました。ここまではできまし
たが。

1,名前を「Calendar4」にすると(このフォームは同じ名前のコントロールがあり
ます。・・・・・。と!メッセージダイアログが出まして、名前の変更ができないよ
うです。)
・一つのフォーム上のボックス名はボックスの種類が違ってもユニークです。
 「Calendar4ラベル」とでもしますか

2,これが重要ですが、「マスタ登録と呼ぶラベルボックスを配置」の利用方法が今
一歩分からないのですが。
・デザインビューで
 [「マスタ登録」ラベルを右クリック]→[イベント]→[クリック時の右端の…]
 →[コードビルダ]→[OK]で表示されたコーディングを次のように完成させます
Private Sub マスタ登録_Click()
DoCmd.OpenForm "マスタ登録"
End Sub

※上記コーディングで、半角入力モードでdocmd.迄入力すると候補のリストが表示されます。

投稿日時 - 2017-02-10 22:29:40

補足

ご面倒とは思いますが、アドバイスをお願いしたいと思います。

[I-2]

マスターフォームのカレンダーコントロールをアクティブにして、プロパティーシートの「その他」タブのヒントテキストにコメントを入力すると当日の日付で「入力文言」が反映されました。

将来のコメントを残す手法について更にアドバイス「Me.Calendar4 = Date+1(明日)」頂きましたが、何処にどの様に記述すれば実現できるのでしょうか。考えてみましたが発想を展開「老化かも」できませんでした。

アドバイスの記述
・明日は Me.Calendar4 = Date+1
・1週間後は Me.Calendar4 = Date+7


[II-2]
コマンドボタンを使わずテキストボックスでフォームを開ける「この点は確り理解しました」ことを知りました。末尾コメントに「半角入力モードでdocmd.迄入力すると候補のリスト・・・」とありますが、差し支えなければ記入の例をご伝授頂けませんでしょうか。


Private Sub マスタ登録_Click()
DoCmd.OpenForm "マスタ登録(フォーム名)"
End Sub

以上ですが、私自身の理解ズレの心配でもありまして、誠に心苦しいんですがご指導をお願いします。

追伸:前のアドバイス「2項目が宿題になっている」がきっかけで「自作データベース(分野別のデータを保存して検索するだけですが)」を手直し「使いやすさが利用に繋がることを確認」する良い機会になりました。有難うございます。

投稿日時 - 2017-02-11 10:00:18

ANo.3

>アドバイスのVBAをフォーム(マスター)のカレンダー部分(名前:Calendar0)をアクティブにして更新ご処理に記述しましたが、日付は変更されませんでしたl

カレンダーフォーム開いた状態で
他のフォームを開くとカレンダーフォームはスリープ状態です。
他のフォームを閉じるとカレンダーフォームはスリープからアクティブなります。
このイベントにVBAを定義します。
結論は開いた時とアクティブになった時の2つのVBAが必要です。

Private Sub Form_Load()
Me.Calendar4 = Date 
End Sub
Private Sub Form_Activate()
Me.Calendar4 = Date 
End Sub

>データベースツールのパフォーマンス最適化で全ての項目設定で実施した
これはやらないほうがよろしいかと

>今後の使い方として、フォーム(マスター)にコマンドボタンを配して、別の予定表データベース(新たに作成)のフォームを呼び出して管理する方法を検討しています。
コマンドボタンボタンでなくすべてのボックスでイベント処理が出来ます。

予定表登録フォームをマスタフォームから呼び出してみましょう
マスタフォームにマスタ登録と呼ぶラベルボックスを配置します
(ラベルを配置しただけではラベル0という名前です、これを表示名と同じ予定表登録に変更します
VBAは
Private Sub 予定表登録_Click()
DoCmd.OpenForm "予定表登録"
End Sub
詳しくは参考URLを参照して下さい

>日付にヒントテキストを埋め込む事は可能でしょうか。
ボックスのプロパティーシートのその他タグにあります。
Accessのリボンアイコンに似た動作です

参考URL:http://www.geocities.jp/cbc_vbnet/kisuhen/docmd.html

投稿日時 - 2017-02-09 23:36:59

補足

chayamati レベル11様
ご報告申し上げます。
I、カレンダーにヒントテキストの入力について

1,マスターフォームを開いてカレンダー部分をアクティブ(名前:Calendar4)にし、プロパティーシートのヒントテキスト欄に記入すると、マスターフォームを開いた時に「本日の日付」ボタンをマウスで撫ぜると記入したコメントが表示されました。”感激です”

2,本日以降の日付への入力「アクティブな状態で明日の日付をクリックし、デザインフォームにすると本日の日付になる」ができないですが、どこがいけないのでしょうか。


II、マスタ登録とラベルボックスについて

メニュータブの「ホーム」直下のクリップボード文字横の右下向き「矢印」を選択すると「マスタ登録と呼ぶラベルボックスを配置」のアイコンと説明文字が現れました。クリックするとマスターフォームにラベルが張り付きました。ここまではできましたが。

1,名前を「Calendar4」にすると(このフォームは同じ名前のコントロールがあります。・・・・・。と!メッセージダイアログが出まして、名前の変更ができないようです。)

2,これが重要ですが、「マスタ登録と呼ぶラベルボックスを配置」の利用方法が今一歩分からないのですが。


III、カレンダーコントロールのVBAについて

アドバイスの「カレンダーフォーム開いた状態で他のフォームを開くとカレンダーフォームはスリープ状態。」「2つのVBAが必要」の2項目の深い知識を得られたことに感謝いたします。”有難うございます”

申し訳ないですが、ご報告いたしました内容についてアドバイス「ピンポイントヒント」をお願いできますでしょうか。

投稿日時 - 2017-02-10 19:37:34

ANo.2

こんにちは
カレンダーフォームは自作されたフォームの一つですね、認識間違いでした。
カレンダーフォームのデザインビューで次のコード(VBA)を追加してください。

Private Sub Form_Activate()
カレンダー日付 = Date
End Sub

追伸
1.Access2007ならテキストボックスの書式プロパティーを日付にしておくと
 カーソルがこのボックスの上に来た時右端にカレンダー入力アイコンが表示されます
2.フォーム間の参照は参照するフォームの内容が先に確定していなければなりません。
3.ところでカレンダーコントロールはAccess2003迄でそれ以後のヴァージョンでは
 機能しなっかった気がしますが

投稿日時 - 2017-02-09 08:34:13

補足

アドバイスを有難うございます。説明不足がありそうです。現状のフォームですが、カレンダーフォームをAccess2007のツールからダウンロードしたものを無地のフォーム(名前:マスター)に貼り付けてあります。その上で、アドバイスのVBAをフォーム(マスター)のカレンダー部分(名前:Calendar0)をアクティブにして更新ご処理に記述しましたが、日付は変更されませんでした。又、カレンダー(Calendar0)を貼り付けてある元フォーム(マスター)のアクティブ時にも記述しましたが、日付は本日日付になりませんでした。

Private Sub Calendar0_Enter()
Calendar0 = Date
End Sub

Private Sub Form_Activate()
Calendar0 = Date
End Sub

追伸:質問掲載の内容を変更した経緯もあり、アドバイスを頂くタイミングが遅れてしまったようです。自分なりにフォームを開いた時に日付を変更するVBAをWEBで見つけまして、フォーム(マスター)の(読み込み時)に記載しましたところ、フォームを開いた時に本日日付に変更できる様になりました。ご報告します。

Private Sub Form_Load()
Me.Calendar4.Value = Date 
End Sub

追伸:不具合が発生しました。データベースツールのパフォーマンス最適化で全ての項目設定で実施したところ、開いた時にエラーアラートがでまして、その後にカレンダーが表示される様になりました。但し、VBAを削除してVBAを書き直すとエラーアラートは出なくなりました。

以上ですが、全て当日日付を表示させる内容です。今後の使い方として、フォーム(マスター)にコマンドボタンを配して、別の予定表データベース(新たに作成)のフォームを呼び出して管理する方法を検討しています。二度手間になりますが、日付にコメントを入力するのは難しそうに感じ始めたことが理由ですが、その様に感じています。日付にヒントテキストを埋め込む事は可能でしょうか。言っていることにピント外れがありましたらご指摘下さい。

投稿日時 - 2017-02-09 09:49:58

ANo.1

自分も興味があり、どなたかの回答を待っていましたが
回答がないので投稿します。見当外れならゴメン

>カレンダーフォーム
?
添付画像はAccess2000のActiveXのカレンダーによく似ています。
これと同種のものならボックスの一種です。
何かのイベントで更新可能です。

Private Sub カレンダー_DblClick(Cancel As Integer)
カレンダー = Date '本日の日付
End Sub

投稿日時 - 2017-02-08 16:39:54

補足

アドバイスを有難うございます。私の説明不足がありそうです。現状のフォームですが、カレンダーフォーム(Access2007のツールからダウンロード)したものを無地のフォーム(名前:マスター)に貼り付けてあります。その上で、アドバイスのVBAをカレンダー(Calendar0)を貼り付けてある元フォーム(マスター)のダブルクリック時にも記述しましたが、日付をダブルクリックしてもエラーアラートがでます。念の為、日付は本日日付になっていません事でお伝えします。

Private Sub Form_DblClick(Cancel As Integer)
カレンダーフォーム マスター = Date '本日の日付
End Sub



追伸:質問掲載の内容を変更した経緯もあり、皆様からのアドバイスを頂戴するタイミングが合わなかった様な気がしています。そこで、自分なりにフォームを開いた時に日付を変更するVBAをWEBで探しましたところ、それらしい記事がありましたので、フォーム(マスター)の(読み込み時)に記入して見ましたところ、フォームを開いた時に本日日付に変更できる様になりました。本日日付でのフォーム表示についてご報告します。

Private Sub Form_Load()
Me.Calendar4.Value = Date 
End Sub

追伸:不具合が発生しました。データベースツールのパフォーマンス最適化で全ての項目設定で実施したところ、開いた時にエラーアラートがでまして、その後にカレンダーが表示される様になりました。但し、VBAを削除してVBAを書き直すとエラーアラートは出なくなりました。「基礎知識不足かと思いますが思い当たることがあれば教えて下さい」

以上ですが、全て当日日付を表示させる内容です。今後の使い方として、フォーム(マスター)にコマンドボタンを配して、別の予定表データベース(新たに作成)のフォームを呼び出して管理する方法を検討しています。二度手間になりますが、日付にコメントを入力するのは難しそうに感じ始めたことが理由ですが、その様に感じています。日付にヒントテキストを埋め込む事は可能でしょうか。言っていることにピント外れがありましたらご指摘下さい。

投稿日時 - 2017-02-09 09:53:36

あなたにオススメの質問