Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


268 / 2272 ツリー ←次へ | 前へ→

【12316】カレンダーコントロールを複数のテキストボックスで使用 くやっち 13/5/22(水) 11:07 質問[未読]
【12317】Re:カレンダーコントロールを複数のテキス... かるびの 13/5/23(木) 1:39 回答[未読]
【12318】Re:カレンダーコントロールを複数のテキス... くやっち 13/5/23(木) 23:52 お礼[未読]
【12319】Re:カレンダーコントロールを複数のテキス... hatena 13/5/25(土) 8:23 回答[未読]
【12320】Re:カレンダーコントロールを複数のテキス... くやっち 13/5/27(月) 16:01 お礼[未読]

【12316】カレンダーコントロールを複数のテキスト...
質問  くやっち  - 13/5/22(水) 11:07 -

引用なし
パスワード
   いつもお世話になっています。
Access2003を使用しています。

フォームに年月日を手入力ができるテキストボックスを作りました。
このテキストボックスをダブルクリックすることでカレンダーが表示され、更に日付をダブルクリックすることで、該当の日にちが入力できるようにしました。

Private Sub カレンダー_DblClick()
  DoCmd.SelectObject acForm, "サービスフォーム", False
  Forms!サービスフォーム!受注日 = Me.カレンダー.Value
  DoCmd.Close acForm, "カレンダー"
End Sub


しかし、実際のフォームには4つの日付入力欄「受注日」「発注日」「入荷日」「出荷日」があり、私の頭ではカレンダーコントロールを4つ作り(例えばカレンダー1、カレンダー2・・・等)、それぞれに対応させるくらいの力量しかありません。

ひとつのカレンダーコントロールでそれぞれの日付を入力することが可能だと思いますが、簡単にできるようであればご教授ください。

尚、テキストボックスをダブルクリックするとカレンダーが表示される方法は、マクロを使用して開くようにしています。

出張のため返信は遅れますが、よろしくお願いいたします。

【12317】Re:カレンダーコントロールを複数のテキ...
回答  かるびの  - 13/5/23(木) 1:39 -

引用なし
パスワード
    カレンダー・コントロールは使ったことがありませんが、
次のような方法はどうでしょうか。
 
 ダブルクリックされたテキストボックスを格納するモジュールレベル
のオブジェクト変数(データ型はテキストボックス型)を
予め用意しておく。
   例 Dim objDblClickTxt As Textbox
 テキストボックスのダブル・クリックイベントで、
ダブル・クリックされたテキストボックスを上記変数に格納する。
 カレンダーコントロールのダブル・クリックイベントで、
上記変数のValueプロパティにカレンダー・コントロールの日付を代入し、
上記変数を初期化する。

【12318】Re:カレンダーコントロールを複数のテキ...
お礼  くやっち  - 13/5/23(木) 23:52 -

引用なし
パスワード
   かるびの さん:

回答ありがとうございます。
やっぱり変数ですよね。
仰っていることは良く分かります。
しかし、私にはそれをどのように組み込んでいけばよいかさっぱり検討がつきません。
N88BASICなら分かるのですが…(笑)

誠に申し訳ありません。

【12319】Re:カレンダーコントロールを複数のテキ...
回答  hatena  - 13/5/25(土) 8:23 -

引用なし
パスワード
   ▼くやっち さん:
>フォームに年月日を手入力ができるテキストボックスを作りました。
>このテキストボックスをダブルクリックすることでカレンダーが表示され、更に日付をダブルクリックすることで、該当の日にちが入力できるようにしました。
>
>Private Sub カレンダー_DblClick()
>  DoCmd.SelectObject acForm, "サービスフォーム", False
>  Forms!サービスフォーム!受注日 = Me.カレンダー.Value
>  DoCmd.Close acForm, "カレンダー"
>End Sub

カレンダーコントロールは別フォーム「カレンダー」に配置してあるのですね。

テキストボックスをダブルクリックで呼び出すということは、そのテキストボックスにフォーカスがあるということなので、カレンダーフォームが開くときに Screen.ActiveControl で取得出来ます。

カレンダーフォームのモジュールは下記のようになります。

Option Compare Database
Option Explicit
Dim ctl As Control

Private Sub Form_Load()
  Set ctl = Screen.ActiveControl
  If IsDate(ctl.Value) Then
    Me.カレンダー.Value = CDate(ctl.Value)
  Else
    Me.カレンダー.Value = Date
  End If
End Sub

Private Sub Calendar0_Click()
  ctl = Me.カレンダー.Value
  DoCmd.Close acForm, "カレンダー"
End Sub

テキストボックスに既に日付が入力されいるときは、カレンダーもその日付が選択された状態、
日付が入力されていないときは、今日の日付が選択される仕様にしています。

上記の仕様を汎用的な関数にしたサンプルが下記にありますので、ご参考に。

カレンダーコントロールを利用した日付入力汎用関数 - hatena chips
hatenachips.blog34.fc2.com/blog-entry-33.html

【12320】Re:カレンダーコントロールを複数のテキ...
お礼  くやっち  - 13/5/27(月) 16:01 -

引用なし
パスワード
   hatena さん
いつもありがとうございます。

せっかく教えていただき、ホームページも見させていただきましたか、私には理解できる頭がありませんでした。

結局、4種類テキストボックス毎にカレンダーを起動させ、それぞれOPEN、CLOSEのマクロおよびコードを作成し、値を代入する方法が一番わかりやすいのだと考えました。

色々とご迷惑をおかけし、貴重な時間をさいていただき、申し訳ありませんでした。

また何かありましたら、こんな私ですがご指導の程よろしくお願いいたします。

268 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078191
(SS)C-BOARD v3.8 is Free