• ベストアンサー

Accessのサブフォーム

Access2000です。 フォームを作成し、ツールボックスより「サブフォーム/サブレポート」をクリックしてサブフォームを配置しました。 イベントがEnterとExitしかないやつです。 検索するとサブフォームのテキストボックスが・・・とかあるのですが、何の事やら?です。 この、配置したサブフォームと検索すると色々ヒットするサブフォームは別物なのでしょうか? このシンプルなサブフォームのソースオブジェクトにテーブルを指定して表示させています。 リンク子フィールドやリンク親フィールドは未設定です。 使い方が間違っているでしょうか? このサブフォームの使い方がイマイチよく分かりません。 検索しても前述のように存在しないイベント(?)等の説明でさっぱりです。 分かりやすくどなたかお願いします。。。

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

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.1

> このシンプルなサブフォームのソースオブジェクトにテーブルを指定して表示させています。 これができているのでしたら、難しくはないと思います。 サンプルの作成法を説明しますので、いろいろ試してみて下さい。 1)新規mdbを作成して開く  (後で下記フォームを削除するなら、ここは既存のmdbでも可) 2)新規フォームを作成し、テキストボックスやコマンドボタンなどを適当に配置  (とりあえず、サブフォームの設定法のサンプルなのでレコードソースは空でも可) 3)上記フォームに「SF1」と名前をつけて保存 4)改めて新規フォームを作成し、サブフォーム(シンプルと言われたもの)を配置 5)サブフォーム内をクリックした後、「SF1」と入力  (または、サブフォームのプロパティシートで、『ソースオブジェクト』に「SF1」を指定)  ※テーブルの場合はテーブル名の前に「テーブル.」をつけて「テーブル.テーブル1」等としますが、   フォームを指定する場合は「フォーム.」はつけずフォーム名だけを指定します) 6)上記フォームに「MF1」と名前をつけて保存 ・・・以上です。 これで、MF1を開くとサブフォームコントロール内には「SF1」(に配置したテキストボックス等)が 表示されるようになります。 なお、この場合も、サブフォームの「コントロールとしてのイベント」は「Enter」と「Exit」の2つしか ありませんが、ソースオブジェクトに指定したフォーム(上記の例では「SF1」)側で、各種イベント (Openその他)が実行されます。 ※Access2003の場合、ソースオブジェクトにフォーム名を指定した時点で、当該フォームの  デザインビューがサブフォームコントロール内に表示され、そこでコントロールの追加やイベントの  設定などができます。  (サブフォームの内側をゆっくり2回クリックすると、そちらのコントロールやイベント等の編集が可能)  Access97の場合は、指定したフォーム名が表示されるだけなので、コントロールの追加などは  そのフォームを別途デザインビューで開く必要があります。  Access2000は勤務先で以前使っていたのですが、Access97/2003のどちらと同じだったかは  忘れてしまいました(汗)

yuky-4126
質問者

お礼

回答ありがとうございます。サンプルそのままを作成してみました。 Webのiframeのようなものですね。 1つのフォームに複数のフォームを配置できるのですね。 検索して出てくるオブジェトの意味も分かりました。 ありがとうございました!

その他の回答 (1)

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

> サブフォームは別物なのでしょうか? 別物ではないと思います。 そのフォームをデザインで開きプロパティを表示した時、そのサブフォームコントロールをクリックしたらプロパティには何が表示されますか。 「ソースオブジェクト」には何が書かれていますか。 ここには現在使われているように、テーブル名が入ったり、クエリ名が入ったり、はたまたフォーム名が入ったりします。 親子関係とかよくいう時には、フォームを指定していることが多いようです。 > リンク子フィールドやリンク親フィールドは未設定です 特に指定しなくても、サブフォーム側単独で動かしたりしています。 > 使い方が間違っているでしょうか? 間違ってはいないと思います。(そのような表示もするので) 以下は、私が実際に行っている処理部分の抜粋になります。 フォームの上部分に、オプショングループを配置し、やりたい処理を選んでもらいます。 その選択内容により、サブフォームに表示するフォームを切り換えています。 親子関係は設定していません。 Private Sub op1_Click()   Select Case Me.op1     Case 1         Me.fsub.SourceObject = "F_A1"     Case 2         Me.fsub.SourceObject = "F_A2"     Case 3         Me.fsub.SourceObject = "F_A3"     Case 4         Me.fsub.SourceObject = "F_A4"     Case 5         Me.fsub.SourceObject = "F_A5"     Case 6         Me.fsub.SourceObject = "F_A6"   End Select End Sub ※ op1 がオプショングループ、fsub がサブフォームコントロール名 ※ この方法は決まった大きさ位置での表示を、画面を切り替えるようなイメージで操作させたかったので ※ よく例とか教材に出てくるような画面構成は、親のフォームにもテキストボックスなりコントロールのものがあって、サブフォームに表示した内容のものを拾ってくるとか参照させるとかが多いです。 でも、使い方はそれだけではないので、その時々で考えられればいいと思います。

yuky-4126
質問者

お礼

細かな回答をありがとうございます! オブジェクトが絶対必要、という訳ではなく、今のやり方でも良いと知って安心しました。 オプションボタンではなくコンボボックスで似たような動作をさせてみました。なるほどー。 ありがとうございました!