• ベストアンサー

ACCESS マクロでWhere条件式について質問

マクロについてですが、「アクションを開く」アクションで引数のWhere条件式について質問です。 やりたいことは、フォームA・フォームBがあり、共通のフィールド"顧客ID"があります。この二つのフォームを連動させて並行に表示させたいと思います。 マクロに登録する内容は、 アクション「フォームを開く」 引数(フォーム名)フォームA   (Where条件式)[Forms]![フォームA]![顧客ID]=[Forms]![フォームB]![顧客ID] アクション「オブジェクトの選択」 引数(オブジェクトの種類)フォーム  (オブジェクト名)フォームB 上のように(Where条件式)で[Forms]![フォームA]![顧客ID]]=[Forms]![フォームB]![顧客ID] とすると、レコードは何も表示されませんでした。 しかし、[顧客ID]=[Forms]![フォームB]![顧客ID]とすると正しく表示します。なぜ、[Forms]![フォームA]![顧客ID]]=[Forms]![フォームB]![顧客ID]とすると、ダメなのでしょうか??

質問者が選んだベストアンサー

  • ベストアンサー
  • venzou
  • ベストアンサー率71% (311/435)
回答No.2

回答は出てますが、もう少し詳しく説明してみます。 興味があれば読んでみてください。 厳密に言うと、Where条件式には、どんな式を書いても構いませんが、 しかし、レコードソースのフィールドを含んでいないと、意味がありません。 ------------------------------------------------------ マクロを実行する前に、フォームAが閉じていた場合。 マクロを実行すると、 1.フォームが作られる 2.レコードソースを開く(この時にWhere条件で絞込み) 3.最初のレコードの値をコントロールに表示 こんな感じの流れになります。 [Forms]![フォームA]![顧客ID] 上記がコントロールだとすると、 1~2の段階では、レコードソースが確定していないので、 内容は空(Null)の状態です。 Where条件は2の段階で使われますので、常にNullとなります。 [Forms]![フォームA]![顧客ID] = [Forms]![フォームB]![顧客ID] 上記の式は Null = (フォームBの現在の顧客ID) と評価され、常にFalseで、レコードは選択されません。 ------------------------------------------------------ マクロを実行する前に、フォームAが開いていた場合。 既にフォームは開いているので、 [Forms]![フォームA]![顧客ID] 上記の値は現在フォームに表示されている値です。 この値を仮に「値A」とします。 [Forms]![フォームA]![顧客ID] = [Forms]![フォームB]![顧客ID] 上記の式は 値A =(フォームBの現在の顧客ID) と評価され、常にTrueで、すべてのレコードが選択されるか、 又は、常にFalseで、レコードが全く選択されないか、のどちらかです。 ------------------------------------------------------ 結局の所、Where条件にレコードソースのフィールドが含まれていない場合、 条件式はレコードにより変化しないで、固定の値を使います。 結果は、常にTrueかFalse、All or Nothing になります。 今回のポイントは、 [Forms]![フォームA]![顧客ID] これがフォームのコントロールで [顧客ID] これが、レコードソースのフィールドを表わす、と言う点。 Where条件でレコードを絞り込むタイミングと、 フォームのコントロールに値が入るタイミングの問題ですね。

minao9
質問者

補足

ありがとうございます。 >今回のポイントは、 >[Forms]![フォームA]![顧客ID] これがフォームのコントロールで >[顧客ID] これが、レコードソースのフィールドを表わす、と言う点。 そうなのですね。 既にフォームAが開いていた場合では結果が異なってくるんですね。 詳しい説明どうもありがとうございます!

その他の回答 (1)

回答No.1

Where条件式の左辺(=の左側)には、(そのフォームで使う)データソースのフィールド名を書く必要があります。 Where条件式で制限されるのは、データソースだからです。

minao9
質問者

補足

そうなのですね。 ['(フィールド名)'] = Forms!['(フォーム名)']!['(別のフォームのコントロール名)'] の['(フィールド名)'] = と、開くフォームの基になるテーブルまたはクエリにあるフィールド名を指定しないといけない決まりなんですね? 回答くださってありがとうございます。

関連するQ&A

  • Accessのwhere条件式について教えて下さい

    初歩的内容の質問ですみません。 Access初心者のため色々施行錯誤しながらやっているのですが、 行き詰まりました。 「フォームを開く」でWhere条件式の設定がうまくいきません。 フォームAにボタンをクリック時フォームを開くを設定しました。 開くフォームはフォームBです。 共通のフィールドの"顧客ID"でフォームを連動させてたいのですが、 where条件式に[顧客ID]=[Forms]![フォームB]![顧客ID]と入力しても反映されません。 フォームBの顧客IDの名前を替えても反映されず、何も表示されません。 ="[顧客ID]=" & =[Forms]![フォームB]![顧客ID]にするとエラーになります。 どのような式を入れると同じIDのものが表示されるようになりますか? 教えて下さい。 よろしくお願い致します。

  • AccessマクロのWhere条件式でタブコントロールの値を使う

    ACCESSのファイルで テーブルには、商品名(テキスト型)、分類名(テキスト型)とその他が登録されています。 フォームにタブコントロールを作成し、ページ名には1ページ1商品名を登録し、全てのページには、分類名を全てラベルで作成しています。 その分類名のラベルをクリックすると、商品名と分類名で抽出したフォームを開くマクロを登録したいのですが、フォームを開くアクションの引数でフィルタ名でクエリを指定するのではなく、Where条件式でタブコントロールの値から式を求めるやり方はありますか? クエリで登録する方が簡単で分かりやすいのですが、それぞれ抽出クエリを作成するのは件数が多いので大変かな・・と。 ちなみに私はVBAは素人ですが、Where条件式で簡単にできますでしょうか??

  • ACCESS where条件式

    アクセス初心者です。 フォームで表形式の一覧「在庫一覧F」を作っています。 もうひとつ単票形式のフォーム「在庫表F」も作っています。 もとは同じテーブルのデータです。 表形式のフォームの一覧で、現在選択してるレコードの単票形式のフォームを開きたいのですがうまくいきません。 選択中のレコードをひらくというコマンドボタンを作成し、クリック時にマクロを割り当てています。 フォーム名:在庫表F ビュー:フォームビュー where条件式:Me.CurrentRecord=[Forms]![在庫表F]![ID] 以前マクロを使ってうまくできていたのですが、サーバーがこわれ作り直しています。どこを直したらうまくいくのでしょうか…。 どなたか教えてください。よろしくお願いします。

  • Access where条件式について

    Access where条件式について 最近マクロでwhere条件式による抽出を知った初心者です。 現在単ページ表示のフォームから、表示されているID番号のレポートを表示させたいと考えているのですが、そのレポートをレコードソースになるマスターテーブルから [Form]![ID]=[マスターテーブル]![ID] とすると該当するレポートが表示されるのですが、 レポートのレコードソースをクエリに変更 [Form]![ID]=[マスターテーブルクエリ]![ID] に変更するとすべて空で表示されてしまいます。 クエリを使用することは出来ないのでしょうか? データベースの基礎があやふやなこと、where条件を最近知ったことなどから、検討違いなことを質問していたら申し訳ありません。 また質問に対して、足りない情報があればご指摘願います。 OS Windows XP Access 2003

  • where条件式であいまい検索がしたいです。

    宜しくお願いします。 仕様環境:WinVISTA access2007 検索のやり方で戸惑っているのですが、 マクロを使って中にWhere条件式を書いています。 ちなみにこれです。↓ ・マクロ:フィルタの実行  [Forms]![メインフォーム]![番号検索]=[顧客番号] Or [Forms]![メインフォーム]![名前検索]=[名前] ・マクロ:再クエリ つまりテキストボックスに探したい顧客番号(「番号検索」というボックス)や、 名前(「名前検索」というボックス)を入れてコマンドボタンで検索をすれば、 「OR」を使っているので、どちらかに該当すれば検索できます(これはOKでした)。 またクエリとVBAは使っていません(VBAに関しては疎いので・汗) ここで質問なんですが、「名前」を検索する際に「完全一致」でないと検索できません。 これをlike~から始まるワイルドカードを使って「あいまい検索」にしたいのですが、 この条件式の中でどこを修正すればよいのでしょうか? いろんなところに入れて試したのですができません。 ちなみに[名前]の前後ともにあいまい(*)にしたいと思っています。 どうかお知恵をお貸しください、宜しくお願いします。

  • AccessのWhere条件式について教えて下さい

    Access始めたばかりです。 テーブルのデータを修正するフォームを作る際にWhere条件式に ="消費者コードは?" & [消費者コード] と指定したところ、"このオブジェクトにはオートメーションオブジェクト"消費者コード"は含まれません。”というエラーメッセージが表示されました。 おそらく基本的なところで間違いがあると思うのですが、よくわからないので、 ご面倒だとは思いますがどなたか教えていただけませんでしょうか?

  • Access2003 マクロ フィルタ

    こんにちは、 Access2003 マクロ フィルタで あ行だけを抽出しなさいという命令を書いたところ、 [顧客名称(読み)] Like "[あ-お]*"と書くと正常にあ行のリストを表示 [Forms]![F_顧客リスト]![顧客名称(読み)] Like "[あ-お]*"というように[Forms]![F_顧客リスト]!を追加して書くと何も表示されなくなり正常な動作をしてくれませんでした。 いったいなぜでしょうか? 何かお分かりの方がいましたら教えてください。 よろしくお願いします。 顧客リストから絞り込むようなフォームを作ろうとしています。 1.[F_顧客リスト]というフォームに[frm_五十音フィルタ]という[オプショングループを作成] 2.[frm_五十音フィルタ]オプショングループ内に[tgl_あ]というトグルボタンと作成 3.[frm_五十音フィルタ]オプショングループ内に[btn_顧客名称(読み)]というコマンドボタンと作成 4.マクロで[条件]に[Forms]![F_顧客リスト]![frm_五十音フィルタ]=2 [アクション]に[フィルタの実行] Where条件式に上記のように、 [顧客名称(読み)] Like "[あ-お]*"あるいは、 [Forms]![F_顧客リスト]![顧客名称(読み)] Like "[あ-お]*"と 書きました。

  • Access マクロ SQLは合ってるのに②

    Microsoft Access でマクロ(VBAではない)を制作しています。「検索画面」フォームに情報を入力して「検索実行」を押すと「全項目」フォームがフィルターされて表示するようにしたいです。 制作したマクロ① フォームを開く フォーム 全項目 Where条件式 [投稿者]=[Forms]![検索画面]![投稿者] 制作したマクロ② ローカル変数の設定 変数名 [SQLCode] 値の代入 変数 [LocalVar]![SQLCode] 値 "[投稿者]=[Forms]![検索画面]![投稿者]" フォームを開く フォーム 全項目 Where条件式 [LocalVar]![SQLCode] ローカル変数の削除 変数 [LocalVar]![SQLCode] このマクロを実行したところ、マクロ①は正しく実行されましたが、マクロ②はフィルターされずにフォームが表示されました。 どこを直せば良いのか教えてください。

  • Access2003 マクロ 条件 入力を簡単にしたい。 式ビルダ

    こんにちは、 マクロの[アクション]に[値の入力]を選択した場合など、[アイテム]に数式を入れるときに[式ビルダ](・・・ってやつ)を利用して簡単に式を入れることができます。 ところが、[条件]では、[式ビルダ](・・・ってやつ)が出てこないので手入力をしなければいけません。 (例えば[Forms]![F_顧客リスト]![frm_法人区分]=2などという式) 条件のところで式ビルダのような入力を補助してくれる機能はないのでしょうか? 何かお分かりの方がいましたら教えてください。 よろしくお願いします。

  • Access97→2000変換後にマクロが作動しない

    Access97で作成したアプリケーションソフトをAccess2000に変換したところ、マクロのところがうまく作動しません。OSはXPです。 それもフォームを開く際に特定のレコードを指定するためのWhere条件式[コントロール名]=[Forms]![フォーム名]![コントロール名]を設定してあるのですが、ここがうまくゆきません。 すなわちAccess97だとこのマクロを実行するとコントロール名で数値を入力するように訊いてくるのですが、access2000変換後はいきなり数値入力されないで(=レコードを特定できないで)フォームが開くだけになってしまいます。 似たような別のマクロで、特定のレポートを開くマクロでは、この同じWhere条件式は、ちゃんと作動します。 なぜAcces97で作動するフォームのWhere条件式が、2000では作動しないのでしょうか? またこのような97→2000変換後の不具合はほかの部分でもおこるのでしょうか? 今のところ、動かした範囲では他の不具合は見あたらないのですが・・・ Accessのバージョンアップについて詳しい方、どなたかよろしくお願い致します。