いつもたいへんお世話になっております。
アクセス97で、フォームを複数作りました。フォーム1、フォーム2、フォーム3。
それぞれのフォームのコマンドボタンでフォーム4を呼び出します。
フォーム4のレコードソースにクエリを使用しますが(クエリ1)、
このクエリにの抽出条件に、最初のフォームのコントロールの値(部門)を設定したいのですが、抽出条件に、「FORMS!フォーム1!部門」とすると、同じクエリを他のフォームには使えませんよね?パラメータを作成して、それぞれのフォームのコマンドボタンのなかで指定できてしまえば、クエリ1と、フォーム4を共有できますよね。現在は、それぞれのフォームに対応するフォーム4とクエリ1を作成しています。なんとかなりませんか?
説明が難しくなってきちゃった・・・
・・・パラメータの入力要求をVBAで処理したいのですが、いい方法を教えてください。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

こんにちは。

maruru01です。
フォーム4のレコードソースをSQLステートメントで指定すればいいと思います。
それを標準モジュールにプロシージャ化しておいて、抽出条件を引数にすればいいと思います。

標準モジュールに、

Public Sub myOpenForm4(Cond As String)

  SQL = "(前部)" & Cond & "(後部)"
  DoCmd.OpenForm "フォーム4"
  Forms!フォーム4.RecordSource = SQL

End Sub

としておいて、各フォームのコマンドボタンのクリックイベントでこのプロシージャを呼び出せばいいと思います。
参考になれば幸いです。
では。
    • good
    • 0

フォーム4の抽出条件は、クエリーで設定しないとないとまずいんでしょうか?


フィルターでの処理でも良ければ、フォーム1~3からフォーム4を開くときに、OpenArgsでパラメータを渡して、Openイベントでフィルターをかけてやるのが簡単かと思いますが。
    • good
    • 0

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

このQ&Aと関連する良く見られている質問

QACCESS2000でクエリを抽出条件で抽出

VBA上でクエリの抽出データを取得してファイルに書き込むというプログラムを書いております。

抽出条件として、今日の日付のレコードを取得したいのですが型が一致しませんとエラーになります。

strSQL = "SELECT * FROM " & (クエリー名)& " where (クエリー.カラム名)='" & Format(Date, "yyyy/mm/dd") & "'"

クエリーのカラム名は全角漢字です。

どこがおかしいのでしょうか?

よろしくお願いいたします。

Aベストアンサー

where (クエリー.カラム名)='" & Format(Date, "yyyy/mm/dd") & "'"
where (クエリー.カラム名)=#" & Format(Date, "yyyy/mm/dd") & "#"
では?
日付型の場合、# で、文字型は ' 、数値 は無しです
全角右括弧は投稿の際の手違い?

QAccess2003でフォームにあるコマンドボタンで更にフォームを開く

Access2003でフォームにあるコマンドボタンで更にフォームを開くときのVBA記述で困っています。


Access2003で社員情報管理のデータベースを作成中です。
社員の情報を入力するにあたり、【基本情報】と【詳細情報】とでフォームを分けてあり、【詳細情報】を入力したい場合は、"基本情報フォーム"にあるコマンドボタンをクリックして"詳細情報フォーム"を開くようになっています。

この際、"基本情報フォーム"で開いている社員の【社員番号】を"詳細情報フォーム"の【社員番号】欄にも自動的に表示させるため、以下のようなVBAを記述しました。

Private Sub コマンドボタン_Click()

DoCmd.OpenForm "詳細情報フォーム"

Forms![詳細情報フォーム![社員番号].DefaultValue = Me![社員番号]

End Sub

【社員番号】は7ケタの半角英数で、社員によって、数字だけの場合と、英数混じっている場合とがあります(データ型はテキスト型にしてあります)。

困っているのは、

1.上記を実行した際に、数字だけの社員番号は問題ないのですが、英数混じりの場合だと"社員番号"テキストボックスが「#Name?」という表示になってしまう

2."基本情報フォーム"のコマンドボタンをクリックして新規の"詳細情報フォーム"を開き(社員番号のみが反映され、他の項目は空欄の状態)、詳細情報を入力→保存したあと、別の社員番号で"基本情報フォーム"を開き、コマンドボタンで"詳細情報フォーム"を開くと、前に入力した社員の情報が出てきてしまう。
(つまり、"詳細情報フォーム"のもととなるテーブルに、1行でもレコードがあると、それが出てきてしまう。)

【詳細情報】は、
1.データを入力する社員としない社員とがいる
2.新規でレコードを作成する場合と、既存のレコードを上書きする場合とがある

ので、もととなる"詳細情報テーブル"にその【社員番号の】レコードがなければ新規入力画面を、レコードがあればそのレコードを呼び出す形にしたいのですが、英数混じりの表示の件も含め、どうすれば、正しく表示されるか教えていただきたいです。
ぜひぜひよろしくお願いします。

Access2003でフォームにあるコマンドボタンで更にフォームを開くときのVBA記述で困っています。


Access2003で社員情報管理のデータベースを作成中です。
社員の情報を入力するにあたり、【基本情報】と【詳細情報】とでフォームを分けてあり、【詳細情報】を入力したい場合は、"基本情報フォーム"にあるコマンドボタンをクリックして"詳細情報フォーム"を開くようになっています。

この際、"基本情報フォーム"で開いている社員の【社員番号】を"詳細情報フォーム"の【社員番号】欄にも自動的に表示させるため、...続きを読む

Aベストアンサー

> "詳細情報フォーム"のもととなるテーブルに、1行でも
> レコードがあると、それが出てきてしまう。

これに関しては、
 a)詳細情報フォームのレコードソースに使用している
  テーブルから、基本情報フォームのデータを絞り込み
  条件とするクエリを作成し、これを詳細情報フォーム
  のレコードソースにする
 b)詳細情報フォームを開くときに、基本情報フォームの
  データでフィルタを掛ける
の、おおまかに2種類の対処方法があります。

使い勝手などからすると「a」の方がよいのですが(→「b」
の方法だと、右クリックメニューなどでフィルタを解除すると
現状と同じになってしまう)、現状からの改変が少ない分、
わかりやすいと思われる、「b」の方法を以下に提示します:
(英数混じりの場合への対処も組み込み済みです)

Private Sub コマンドボタン_Click()

  '変数の宣言
  Dim strCode As String

  '『社員番号』を「"」(ダブルクォート)で囲んだ形で記録
  '(→既定値やフィルタ条件に文字列を指定するには必須)
  strCode = Chr(34) & Me![社員番号] & Chr(34)

  '社員番号をフィルタ条件として指定して詳細情報を表示
  '(詳細情報未登録の社員の場合は、空のレコードが表示されます)
  DoCmd.OpenForm "詳細情報フォーム", , , "社員番号=" & strCode

  '既定値(DefaultValue)を設定
  '(既定値への代入なら、入力済みのデータは変更されません)
  Forms![詳細情報フォーム]![社員番号].DefaultValue = strCode

End Sub


・・・以上です。
コード中のコメントにも書きましたが、文字列を既定値やフィルタ
条件に使用する場合は、ダブルクォート(場合によってはシングル
クォート)を括ってやる必要がある、ということです。
(そうしないと、社員番号が「ABC123」の場合、その文字列では
 なく「ABC123」というフィールドやコントロールの値が参照されます
 (→そして該当するものがないので「#Name?」エラーが発生、と))

なお、日付/時刻型のデータを扱い場合は、今度は「#」で値を
括ってやる必要があります(「#2010/05/06#」など)ので、併せて
今後の参考まで。

> "詳細情報フォーム"のもととなるテーブルに、1行でも
> レコードがあると、それが出てきてしまう。

これに関しては、
 a)詳細情報フォームのレコードソースに使用している
  テーブルから、基本情報フォームのデータを絞り込み
  条件とするクエリを作成し、これを詳細情報フォーム
  のレコードソースにする
 b)詳細情報フォームを開くときに、基本情報フォームの
  データでフィルタを掛ける
の、おおまかに2種類の対処方法があります。

使い勝手などからすると「a」の方がよいのですが(→「b」
の...続きを読む

QACCESS フォームから開く【クエリ「パラメータの入力」】でキャンセルしてもエラーにならない方法は?

よろしくお願いします。
ACCESSのフォームでコマンドボタンに以下のように記述しました。クエリを開く単純なものですが、このクエリには「パラメータの入力」が必要で、入力すれば問題ありませんが、キャンセルした時にエラーが生じます。

Private Sub cmd受講者名簿表示_Click()
DoCmd.OpenQuery "Q_受講者名簿用"
End Sub

**エラー表示内容**
実行時エラー ‘2001’:
直前の操作はキャンセルされました
        終了   デバック   ヘルプ

直接クエリをひらいた場合にキャンセルしても問題ないのに、フォームでVBAで記述した場合にパラメータの入力があるクエリをキャンセルしてもエラーにならない方法は無いのでしょうか?

Aベストアンサー

Private Sub cmd受講者名簿表示_Click()
On Error Resume Next
  DoCmd.OpenQuery "Q_受講者名簿用"
End Sub

で!

QAccess フォームコンボボックス空白をクエリで抽出したい

現在access2000を使って、
フォーム1内にコンボボックスを作って
コンボボックス内に1,2,3
と項目を入れています。
一方、クエリを使って、上記フォーム内のコンボボックスをつなげて1,2,3をそれぞれ抽出することはできるのですが、
1から3まで全てをiif関数などで
抽出したいと考えてします。
僕が考えた関数は
iif(isnull([フォーム1][コンボ1]),is not null ,[フォーム1][コンボ1])
とクエリ抽出条件内に入力すると、結果は、
1、2、3をそれぞれフォームコンボボックスで選択すれば、クエリに反映されるのですが、コンボボックス内を「空白」の状態にすると、1,2,3すべてがクエリで抽出されるのではなく、何も抽出されないという結果になってしまいます。
どうすれば、クエリで1から3すべてを抽出することができるのでしょうか?多分、iif関数内の「空白」は空白として処理されないような気がします。
よろしくお願いします。

Aベストアンサー

現在の抽出条件は
=Forms![フォーム1]![コンボ1]
でしょうか

コンボが空白(未選択)時に全て表示としたければ
=Forms![フォーム1]![コンボ1] or Forms![フォーム1]![コンボ1] is null

Qフォームからの入力でクエリを抽出するには?

OS:Win7
Access2003

フォームで入力したデータを元にクエリで抽出させます。

フォームに'ABC'と入力した時は、クエリで'ABC'のデータを表示し、
フォームが未入力の時はすべてのデータを表示させるにはどうすればよいでしょうか?

上記条件では'ABC'のみ抽出させ、'DABC','ABCD'は対象外にします。

宜しくお願いします。

Aベストアンサー

こちらをどうぞ。
フォームから入力した条件のみ有効にしてデータを抽出する方法
http://support.microsoft.com/kb/881390/ja


このカテゴリの人気Q&Aランキング

おすすめ情報