遅くなりました。仕事でなかなか時間が取れなくて
急いでまとめました。提案しようとした案も出て
いるみたいなのですが。
[仕様]
テーブル名 テーブル1
(部署(テキスト型)、日付(日付/時刻型)、スケジュール(テキスト型))
フォーム名 frm検索
ボタン名 cmd検索
テキストボックス名 tx日付FROM
テキストボックス名 tx日付TO
リストボックス名 lst検索
[リストボックスの設定]
リストボックスのプロパティを開いて
複数選択を標準にしておいてください。
リストボックスの値集合ソースに以下を
張り付けてください。
SELECT テーブル1.部署
FROM テーブル1
GROUP BY テーブル1.部署;
これは、テーブルに部署が重複して出て来る
であろうという想定のもとで、ユニオンクエリで
部署名の名寄せをしています。
[その他]
DAOを使用しているのでコード表のツールから
参照設定を選択し、DAOの一番バージョンの
高いものにチェックが入っているか確認して
ください。
Microsoft DAO xx Obuject Library
xxは数値です。たとえば3.6
[コード]
ボタンのクリック時のイベントに以下を張り付けてください。
Private Sub cmd検索_Click()
Call mkSQL
End Sub
次に、以下のコードを同じフォームに張り付けてください。
Private Sub mkSQL()
Dim db As Database
Dim qdf As QueryDef
Dim ctl As Control
Dim strKey As String
Dim strSQL As String
Dim varitm As Variant
Set db = CurrentDb
On Error Resume Next
'前回作成したクエリを削除。二重作成によるエラーの回避
For Each qdf In db.QueryDefs
If qdf.Name = "Q_Temp検索" Then
DoCmd.DeleteObject acQuery, "Q_Temp検索"
End If
Next qdf
Set ctl = Me!lst検索
For Each varitm In ctl.ItemsSelected
strKey = strKey & ",'" & ctl.ItemData(varitm) & "'"
Next varitm
strKey = Mid(strKey, 2)
strSQL = "SELECT テーブル1.部署, テーブル1.日付, テーブル1.スケジュール " & _
"FROM テーブル1 " & _
"WHERE (((テーブル1.部署) In (" & strKey & ")) AND ((テーブル1.日付) " & _
"Between [Forms]![frm検索]![tx日付FROM] " & _
"And [Forms]![frm検索]![tx日付TO]));"
Set qdf = db.CreateQueryDef("Q_Temp検索", strSQL)
DoCmd.OpenQuery ("Q_Temp検索")
qdf.Close
Set qdf = Nothing
db.Close
Set db = Nothing
End Sub
以上です。
[説明]
テキストボックスに期間を入れ、リストボックスで
適当にいくつかを選択してボタンを押すとクエリが
作成され、表示されます。このクエリはその都度
プログラムから作成、削除されます。Accessのクエリ
の制限があるため一応、応急的にこのような方法を
とります。削除はあらたに検索をするときに行い
ますから、一時的にクエリはデータベースに保存されます。
作成されたクエリを観察してみてください。
期間は、二つのテキストボックスに入れますが、
特定の日を指定する場合は二つのテキストボックスに
同じ日付をいれてください。たとえば、
2010/01/01を両方のテキストボックスに
入れます。
[追加]
日付検索を回避する方法もありますが、
一応、日付は必須だろうということで
日付が無い場合は空のクエリが表示されます。
なお、これを元にフォームに表示することも
できます。
一応、提案の内容を確認され、その後
必要なことを質問してみてください。
なお、クエリはコード中にSQL文をもとにして
作成しますから、実際のフィールド名が
わかればSQLの中にねじ込んでおきます。
字数一杯
補足
:piroin654さん 忙しいのにありがとうございます。 なぜか、家のアクセスは停止してしまうerrが続出 なんとか動いています。 もしかしたら家のアクセスは2002で会社が2007の違いでしょうか、これはおきまして 教えて頂いたように作ってみましたがうまくできませんでした。 frm検索から日付をいれて入力しましたが結果がでてこないので クエリ Q_Temp検索をあけようとすると下記のerrが出ます。 クエリ式’(((テーブル1部署)In())AND((テーブル1日付)Between[Forms]![frm検索]! [tx日付FROM]And[froms]![frm検索]!「tx日付TO」))'の構文エラー:;演算子がありません となりQ_Temp検索もあきません 言いたいこと解ってもらえますか、 ここまで教えて頂いてるのにまた申し訳ありませんが助けてください よろしくお願い致します。