2016-07-24 6 views
0

私はアクセスの部屋予約システムを構築しています、私はクエリに関するマクロの助けが必要です。マクロを取得するにはどのようにクエリレコード/行ごとにアクションを行う?

FORM

をこれが正常に動作します:

これは、彼らが部屋を予約するようになったときに、フォームの人々が表示されますです。

私がやったことは、その日に応じて、特定の部屋の予定時間を返すクエリを作成することです。

QUERY

この特定のクエリでは、ルーム111今日のためです。ここでは、今日、部屋111は期間3,4,6で利用できないことを示しています。

これらの行をそれぞれ見て、フォーム上の関連するテキストボックスコントロールを空白にするマクロを作成する必要があります。

だから、このように見える終わる必要があります。

EXAMPLE

これは、マクロを使用して可能である場合、私は知らない、または私はVisual Basicのを使用する必要があります場合。私はマクロを取得する必要があります/コードと言って:

"各行に対しての、IF 111ScheduleCheck.TimeSlot =" 期間1" 、THEN FORMAT背景TO 111_P1 =黒 "の行ごとに

"、IF 111ScheduleCheck .TimeSlot = "期間2"、THEN背景TO FORMAT 111_P2 =ブラック」

などなど

しかし私はそれが動作しません、これを試してみた:

MACRO

私はそれを実行すると、私はちょうどこのエラーが表示されます: ERROR

誰かが私を助けることができますか?

おかげで、

ローワン:)

+0

あなたは[条件付き書式](https://support.office.com/en-us/article/Video-Highlight-data-onを試してみました-forms-by-conditional-formatting-44fe5b63-b6fa-48ea-966e-b5e54eb072b0)? –

+0

マクロを忘れてVBAを使うことをお勧めします。あなたのフォームは連続フォームか単一フォームか?連続していると、これは簡単ではありません。 – Andre

+0

@ThomasInzinaが示唆するように、条件付き書式設定でクロス集計可能性があります。フォームがどのように縛られているかどうか教えてください。 * - > * – Parfait

答えて

1

は、テキストボックスには館内フィールドで期間フィールドとなる連続/複数項目フォームの下に旋回したクエリにフォームの境界を考えてみましょう。また、すべての会議室が1つのスケジュールテーブルを使用することで、ユニオンのクエリを避けることができるように、テーブルを正規化する余地があるかもしれません。

SELECT dT.Room, dT.Day, 
     Max(IIF(dT.[Time Slot] = 'Period 1', 'Yes', NULL)) AS [Period 1], 
     Max(IIF(dT.[Time Slot] = 'Period 2', 'Yes', NULL)) AS [Period 2], 
     Max(IIF(dT.[Time Slot] = 'Period 3', 'Yes', NULL)) AS [Period 3], 
     Max(IIF(dT.[Time Slot] = 'Period 4', 'Yes', NULL)) AS [Period 4], 
     Max(IIF(dT.[Time Slot] = 'Period 5', 'Yes', NULL)) AS [Period 5], 
     Max(IIF(dT.[Time Slot] = 'Period 6', 'Yes', NULL)) AS [Period 6] 
FROM 
    (SELECT 'Room 111' As Room, [Day], [Time Slot] FROM Schedule111 
    UNION SELECT 'Room 121' As Room, [Day], [Time Slot] FROM Schedule121 
    UNION SELECT 'Room 122' As Room, [Day], [Time Slot] FROM Schedule122 
    UNION SELECT 'Room 125' As Room, [Day], [Time Slot] FROM Schedule125) AS dT 
GROUP BY dT.Room, dT.Day 

そしてconditionally format背景色と6期のテキストボックスの各:

[Field Value Is] equal to "Yes". 

最後に、フォームのOnCurrentのトリガイベントを使用して、現在のページの日の値でフォームをフィルタリングします。日付ヘッダーコントロールは、テキストボックスにフォーマット真の日であることを確認してください:

DoCmd.ApplyFilter , "[Day]='" _ 
     & WeekdayName(WeekDay(Forms!YourForm!YourDateControl,2)) &"'") 
+0

申し訳ありませんビットシンプルですが、私はVBA初心者です:P。このためのモジュールを作成するか、クエリのコードを編集しますか? –

+0

まず、SQLスクリプトを使用してストアドクエリを作成します。次に、ルームと6つの期間の7つのテキストボックスを使用して、この新しいクエリにバウンスされた複数のアイテムフォームを作成します。フィルタでは日フィールドが使用されます。次に、期間テキストボックス(リボンのホーム)の条件付き書式設定を使用します。最後に、フォームの 'OnCurrent()' VBAサブルーチンに適用フィルタを置きます(または埋め込みマクロを使用します)。 – Parfait

+0

上記のコードを使用してクエリを作成すると、Accessは「条件式のデータ型が一致しません」というエラーを返します。私はあなたの言うように、すべてのスケジュールを1つのテーブルに入れることができるように、部屋もフィールドであるテーブル 'dT'を作成しました。 –

関連する問題