Access:サブフォームのクエリ表示でフィールドを絞り込む方法

このQ&Aのポイント
  • Access2003 WinXPで、フォームにサブフォームを設定し、サブフォームのソースオブジェクトにクエリを参照するデータシート形式のフォームを配置しています。絞込み条件を選択するオプションボタンと表示するフィールドを選択するオプションボタンを配置し、コマンドボタンでクエリを書き換えています。しかし、表示しない設定のフィールドには「Name?」という値が表示されてしまいます。ダブルクリックイベントを取得するためには、サブフォームにデータシート形式のフォームをセットすることが必要です。
  • Access2003 WinXPで、サブフォームを使用したデータシート形式のフォームを作成しています。絞込み条件を選択するオプションボタンと表示するフィールドを選択するオプションボタンを配置し、コマンドボタンでクエリを書き換えています。しかし、表示しない設定のフィールドには「Name?」という値が表示されてしまいます。ダブルクリックイベントを取得するためには、サブフォームにデータシート形式のフォームをセットすることが必要です。
  • Access2003のWinXP環境で、サブフォームのソースオブジェクトにクエリを参照するデータシート形式のフォームを作成しています。絞込み条件を選択するオプションボタンと表示するフィールドを選択するオプションボタンを配置し、コマンドボタンでクエリを書き換えています。しかし、表示しない設定のフィールドには「Name?」という値が表示されてしまいます。ダブルクリックイベントを取得するためには、サブフォームにデータシート形式のフォームをセットする必要があります。
回答を見る
  • ベストアンサー

Access:サブフォームにクエリ表示⇒フィールドを絞り込みたい

Access2003 WinXP です。 フォームにサブフォームを置き、サブフォームのソースオブジェクトにクエリを参照しているデータシート形式のフォームを設定しています。 フォームに絞込み条件を選択するオプションボタン、表示するフィールドを選択するオプションボタンを配置し、 サブフォームへ表示するコマンドボタンを置いています。 この設定を選択した後コマンドボタンを押すと、クエリの中身を書き換えています。 で、実行すると、表示しない設定のフィールドには「Name?」という値が入ったフィールドがしっかり表示されてしまいます。 ソースオブジェクトにクエリ自体を設定すれば回避出来ますが、表示されたデータをダブルクリックするとその1レコードを表示する画面を更に開きたいと思っていますので、サブフォームにデータシート形式のフォームをセットするのがダブルクリックイベントを取得出来て良いかと思っています。 分かりにくい説明ですみません。 何か解決法を分かる方いらっしゃいましたら、お願いします。

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

  • ベストアンサー
  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.1

> データシート形式のフォームを フォームでデータシート形式で表示する際には、テキストボックス名が項目となるようですので、 ベースのフォームを作る際にはフォームウィザードを使用し、表形式で作成すると、 テキストボックス名=フィールド名にしてくれます。 作る時には、全てのフィールドを表示するクエリから行います。 親フォームに配置したサブフォームコントロール名を「FSUB」と仮定します。 この「FSUB」に、自分(データシート形式のフォーム)が表示されているということにします。 データシート形式になると、制御はサブフォームコントロールのものとして扱います。 制御の中の ColumnHidden を使用します。 以下が処理例となります) ' 指定された名前が、レコードのフィールド名にあるか ' あれば False / なければ True Private Function SetColumnVisible(sName As String) As Boolean   Dim fld As Field   SetColumnVisible = True   For Each fld In Me.RecordsetClone.Fields     If (fld.Name = sName) Then       SetColumnVisible = False       Exit For     End If   Next End Function ' フォーム読み込み時 Private Sub Form_Load()   Dim ctl As Control   For Each ctl In Me.Section(acDetail).Controls     Me.Parent.FSUB.Controls(ctl.Name).ColumnHidden _       = SetColumnVisible(ctl.Name)   Next End Sub ※ フォームの「読み込み時」に、 詳細部分のコントロール名で、レコードのフィールド名にあるかチェックし、設定します。 Hidden と言っても、幅が0になるだけなので、 消えたと思った項目位置付近をいじると、ひょこひょこと出てきます。 ※ Me.Parent.FSUB の記述は、自分の親のサブフォームコントロール名 としていますが、 Forms("親フォーム名").FSUB でも Forms!親フォーム名.FSUB でも ※ テキストボックス名 <> コントロールソース名 なら SetColumnVisible(ctl.Name) を SetColumnVisible(ctl.ControlSource) とすれば 対応できますが、データシートに表示される項目名は、テキストボックスの名前になります。 ※ 表形式で作成したものでなければ、詳細部分にラベルが存在することがあるので、 処理対象のテキストボックスを識別するための工夫はしてみてください。 プロパティの タグ を使用するとか、、、 例えば、 連結しているテキストボックスを全部選択してから、タグ部分に REC と文字を入れて これで判別すると、 Private Sub Form_Load()   Dim ctl As Control   For Each ctl In Me.Controls     If (ctl.Tag = "REC") Then       Me.Parent.FSUB.Controls(ctl.Name).ColumnHidden _         = SetColumnVisible(ctl.Name)     End If   Next End Sub 判別する範囲を、フォーム全体(In Me.Controls)に広げても対応できます。 前の書き方 In Me.Section(acDetail).Controls は、詳細部分にあるものになります。 動かなかったら、ドンドン修正してください。

yuky-4126
質問者

お礼

回答ありがとうございます! ColumnHidden で制御出来るのですねーv 頂いたコードで動かして、でもオプションボタンによっては複数のフィールド全部を一括した意味の物もあったりしましたので 自分なりにアレンジして動くようになりました! Excelへ出力もする事になり、見た目隠れてるだけでExcelに出ちゃったら困るなぁと出力してみたら、大丈夫でした。 やりたい事が実現出来ました。ありがとうございました!

関連するQ&A

  • Accessのサブフォームのフィールドをチェックボックスにより表示/非表示に切り替える方法

    無謀なことかもしれませんが・・・ 下記のようなフォームを作成したいと思い質問させていただきます。 OS:WindowsXP 使用ソフト:Access2003 ・非連結のサブフォームにクエリを表示させています。 ・メインフォームにはクエリのフィールド名が書かれたチェックボックスを並べて配置しています。 ・チェックボックスをオフにしてコマンドボタンをクリックすると、 サブフォームのクエリのフィールドが非表示になり、またチェックボックスをオンにするとサブフォーム内のクエリのフィールドが表示されるようにしたいです。 初心者なので、丁寧に教えてもらえるととても助かります。 どなたかお知恵をお貸しください★

  • サブフォームをリクエリするには?

    アクセスのフォームにはサブフォームがあり、 親フォームの上にあるコマンドボタンで、テーブルに対してアクションクエリでレコードの削除やレコードの更新を行います。 サブフォームにはそのテーブルをソースとしたデータを表示させているのですが、 親フォームの上にあるコマンドボタンのイベントの最後に、 Me.Controls("サブフォーム").Requery を入れても、フォームのデータが#Deletedになります。 Me.Requery でも、サブフォームのデータは#Deletedになってしまいます。 フォームを開きなおしたり、並べ替えをすればデータが表示されますが コマンドボタン押下後にイベントを実行し終わったら、サブフォームのデータも更新されたデータを表示するさせるには どうすればいいでしょうか?

  • サブフォームにデータが表示されない!

    サブフォームにデータが表示されない! フォーム(1)(非連結のtxt顧客コード) フォーム(1)にサブフォーム(2)(レコードソースはクエリ(3))を作り、 クエリ(3)顧客コードの抽出条件に[forms]![フォーム(1)].[form].[txt顧客コード]で選択しています。 フォーム(1)が開いた時にクエリ(3)は抽出しているのにそのデータがサブフォーム(2)に表示されません・・・ フォーム(1)を一度デザインビューにして開き直すとサブフォーム(2)に反映表示されます。 いろんな所にRequeryを入れたりしてみましたが、フォーム(1)を開いたときに一発で表示されません、教えてください!宜しくお願いいたします。

  • Access サブフォームでの表示フィールド選択

    Accessでアドレス帳を作成しています。 データシートには名前、ヨミ、TEL番号、FAX番号、メールアドレス、郵便番号、住所、メモ等のフィールドが存在します。 フォーム上タブコントロールでヨミより「あ・か・さ・た・な」検索できるようにクエリ抽出条件を作成しました。 フォーム上に設置したサブフォームにクエリの抽出結果が表示されます。 ここで、フォーム上に連絡先、住所、メモのオプションボタンを作成し、連絡先にチェックした時にはTEL及びFAX、住所にチェックした場合は郵便番号及び住所・・・のところだけを表示することは可能でしょうか? つまりはクエリの表示項目をフォーム上のオプションボタンでコントロールできるのでしょうか? よろしくお願いします。

  • サブフォームでクエリの更新

    「Q検索」というクエリと「F検索」というフォームを作成しフォーム上には「番号テキスト」とコマンドボタンを作成後、F検索にQ検索をドラッグしてQ検索のサブフォームを作成しました。 Q検索の番号フィールドの抽出条件には[Forms]![F検索]![番号テキスト]は入力しています。 やりたいことは 番号テキストに番号を入力しコマンドボタンをクリックしたら 一致する番号だけをサブフォームに表示させたいのですがどうすればいいのかわかりません。 今の状態は コマンドボタンのクリックイベントにVBA DoCmd.OpenQuery "Q検索", acNormal, acEdit 普通にクエリが開いてしまいます。 これをサブフォームで行うにはどうすればいいのでしょうか? よろしくお願いします。

  • アクセス サブフォームの使い方

    フォームにテキストボックスとコマンドボタンサブフォームが1つづつありま す。 やりたいことは、テキストボックスに入力した条件でコマンドボタンを押すと サブフォームに結果が表示されるというものです。 ID 分類 名称 1  花  バラ 2  花  ユリ 3  昆虫 カブトムシ とテーブルがあった場合、 テキストボックスに 花 を入力すると サブフォームに バラとユリが 表示されるというものです。(実際にはフィールド数はもっとあります。) コマンドボタンにクエリの実行を登録し、サブフォームはクエリをベースに作 成しました。 コマンドボタンをクリックするとクエリの結果が表示され(当たり前ですね) サブフォームは白紙のままです。 ファームのデザインビューをクリックし、再度フォームを表示すると結果は反 映されます。 この、クエリの結果を表示せず、かつサブフォームに結果を表示させる方法を 教えてください。

  • Access:データシート形式表示のフォームをそのままExcelへ

    Access2003 WinXPです。 フォームにサブフォームを置き、クエリで抽出したデータを データシート形式で表示しているフォームをサブフォームへ表示させています。 この、サブフォーム、またはデータシート形式のフォームをまるっと新規Excelへエクスポートしたいのですが、うまくいきません。 クエリをエクスポートは出来ますが、ユーザーがサブフォームに表示されたデータのフィールドを入れ替えて、その見た目のまま出力したいという希望があるので。。。 分かる方いらっしゃいましたら、宜しくお願いします。

  • サブフォームにクエリの結果を表示するには・・・?

    ACCESSで勉強を始めたばかりの者です。 過去ログを検索してもわからなかったので教えてください。 ただ今検索用のテキストボックスを作り、コマンドボタンを押すとクエリが実行されるようになっております。 ここで、クエリの画面を出すのではなくサブフォームを作ってそこに表示させるようにしたいと思ってます。 表示させたい項目はすでに作ってはみたのですが、どうやったらコマンドボタンを押してそこに表示させるようにできるのかがわかりません。 もしかしたら大変未熟な質問をしているかもしれませんが、どうか教えてください。

  • Access2000 フォーム/サブフォームについて

    質問させていただきます。 フォーム/サブフォーム形式で画面を作っています。サブフォームは帳票形式で、複数のレコードを表示しており、各行の左にコマンドボタンを用意し、それをクリックすると、更新クエリー、削除クエリーが動くようにしています。 しかし、更新、削除クエリーとも ”0件のレコード”で処理が正しく動作しません。 ちなみに、両クエリの抽出条件は・・・ [Forms]![メインフォーム]![サブフォーム]![商品コード] しかし、フォームを使わずクエリーから実行する(パラメータに条件を手入力する)と正しく動作します。 記述ミスがないか何度も見返したのですが・・・。 「サブフォームの目的の行の商品コードと一致するデータを処理する」としたいのですが・・・。

  • Access 連結フィールド値を自動で表示

    Accessでフォーム上にサブフォーム(データシート)を作成すると、 新規レコード欄にも自動的に連結フィールドの値が表示されます。 このサブフォームをメインフォーム上に作らずに、 コマンドボタンクリック時にあるフィールドが一致する(上記で言う連結フィールド)データを表示したサブフォーム(データシート)を開くかたちにしたいのですが、そうすると当然ながら新規レコード欄には連結フィールドの値は表示されません。 これをメインフォーム上にサブフォームを作った時と同じように、新規レコード欄に連結フィールド値を表示させるにはどうしたら良いでしょうか? サブフォームを開く段階で新規レコードに結合フィールドの値を(VBAで)入力する事も考えましたが、そうするともしそこにデータを入れるつもりじゃなくても1つのレコードとしてデータが残ってしまいます。 メインフォーム上に作ったサブフォームなら、新規レコードに結合フィールドの値は表示されているものの、その他のフィールドにデータを入力しなければ1つのレコードとしてデータが残ることはありません。 こういう事が可能かどうかわかりませんが、ご存知でしたら教えてくださいませ。 よろしくお願いします!

専門家に質問してみよう