電子書籍の厳選無料作品が豊富!

アクセスでフォームが5つあるとします。(フォーム名は、1,2,3,4,5とします。)フォームにはすべて"開始年月日"と"終了年月日"の項目があり、5つのクエリの検索をそれぞれ入力する様になっています。
又、テーブル1があり、このテーブルは毎日データが追加されていきますが(1日50ほど)、追加されたデータは、その日のデータでは無く、2日前の物の場合もあれば、休みを挟んだりすると5日前の物の場合もあります。そのデータ自体の"年月日"フィールドがあります。
まず全てのフォームの"終了年月日"の項目の既定値をテーブル1の"年月日にする事"はできますか?
そしてフォーム1で"開始年月日"と"終了年月日"を入力し確定した時に、その他のフォームを開くとフォーム1で入力した"開始年月日"と"終了年月日"が入力された状態にしたいのです。これは、フォーム1で"開始、終了年月日"を入力した場合だけでなく、どのフォームで"開始、終了年月日"を入力した場合でも、その他のフォームを開くと同じ"開始、終了年月日"がまず入力された状態になっていて変更し確定した場合は、他のフォームの"開始、終了年月日"も変更されているという様にしたいのです。
説明がうまくできなくてすいませんが、誰か教えて頂けないでしょうか?よろしくお願いします。

A 回答 (2件)

#1です



方法は何個かありますが

1)フォーム上に情報を表示しての入力
2)現フォーム構成を変更しない上での入力

を以下に

1)フォーム上に情報を表示しての入力

画像を添付します(上側が実際の表示、下側がデザイン時の表示になります)

テキストボックス「終了年月日」をコピーし、ラベルを削除したものを配置します。
(以降、txt1 と記述)

・txt1 のプロパティを設定します。
コントロールソース: =DMax("年月日","テーブル1")
書式: 日付(S)
タブストップ: いいえ

・「以下を入力してください」用ラベルの作成
画像は、ラベルをクリックした状態のものになります。
文字配置: 右
に設定し、左側空白部分に txt1 が全て収まる大きさとします。
ラベルを選択した状態で、マウス右クリックし、位置→最前面へ移動 を選びます。
図の様に txt1 がはみ出さないように配置します。
これにより txt1 は選択できなくなります。
実際に表示した時の文字位置を、上余白等で調整します。

・テキストボックス「終了年月日」のプロパティ設定
書式: 日付(S)
既定値: =DMax("年月日","テーブル1")
入力規則: <=DMax("年月日","テーブル1")
エラーメッセージ: 指定日はテーブルにありません

実際に表示すると、txt1 の表示が若干遅れるような感じになります。

良ければ、枠線等の見栄えを設定します。



2)現フォーム構成を変更しない上での入力

標準モジュールに以下関数を作成しておきます。
(複数のフォームで使えるようにパラメータで対象のテキストボックスを指定)

Public Sub SetEndDate(txtb As TextBox)
  Dim dt As Date

  dt = DMax("年月日", "テーブル1")
  txtb.DefaultValue = "#" & dt & "#"
  txtb.ValidationRule = "<= #" & dt & "#"
  txtb.ValidationText = dt & " 以下を入力してください"
  txtb.ControlTipText = dt & " 以下を入力してください"
  txtb.StatusBarText = dt & " 以下を入力してください"
End Sub

呼び出す時には以下の様に

  Call SetEndDate(Me.終了年月日)

フォームの読み込み時とか、データを登録したタイミングで呼び出します。


各行の説明)

  txtb.DefaultValue = "#" & dt & "#"
既定値の設定

  txtb.ValidationRule = "<= #" & dt & "#"
  txtb.ValidationText = dt & " 以下を入力してください"
入力規則とエラーメッセージの設定

  txtb.ControlTipText = dt & " 以下を入力してください"
マウス ポインタをテキストボックス上に置いたときにポップ ヒントに表示されるテキストを設定

  txtb.StatusBarText = dt & " 以下を入力してください"
テキストボックスを選択したときにステータス バーに表示するテキストを設定


※ 関数名は適宜変更してください。
「アクセスで」の回答画像2
    • good
    • 0
この回答へのお礼

画像まで添付して頂いて大変助かりました。
ありがとうございました。

お礼日時:2009/11/14 08:51

> 全てのフォームの"終了年月日"の項目の既定値をテーブル1の"年月日にする事"



=DMax("年月日","テーブル1")

でテーブル1の年月日の最新が得られると思います。


> フォーム1で"開始年月日"と"終了年月日"を入力し確定した時

グローバル変数を使用してはどうでしょう。
標準モジュールに
Public dt開始年月日 As Date
Public dt終了年月日 As Date
としておいて、

確定時、上記変数に代入
dt開始年月日 = Me.開始年月日
dt終了年月日 = Me.終了年月日

各フォームの読み込み時イベントで、
Me.開始年月日 = dt開始年月日
Me.終了年月日 = dt終了年月日

と設定するとか

※ "開始年月日"と"終了年月日"は非連結として考えてます。

※ フォームを切り替える時、前のフォームは閉じられる前提です。

この回答への補足

ご回答ありがとうございます。
終了年月日の入力規則をテーブル1の最新以内にするには(例えば2009年11月13日が最新の場合は、2009年11月14日以上を入力するとエラーになる、又、注意書きとして、2009年11月13日までの日付を入力する様にフォームに記しておく事はできるでしょうか?)どの様にしたら良いでしょうか?教えて頂けませんか?よろしくお願いします。

補足日時:2009/11/13 22:58
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!