dポイントプレゼントキャンペーン実施中!

Accessのコンボボックスに連動して、サブフォームを表示させたい。そして、そのサブフォームに新しいデータを追加したい。

コンボボックスに連動さして、サブフォームを表示させるやり方は、検索して見つける事ができました。
そのページはこちらです。
http://www.nurs.or.jp/~ppoy/access/access/acF028 …
しかし、データをサブフォームに追加しようと思うと上記リンク先のやり方では出来ませんでした。

何か方法はないでしょうか?

A 回答 (5件)

ANo.1です


URLを参考にしていろいろやってみました。
出来ました!!! こんなの初めてです。

URLを参考にされたのであれば
・コンボボックス名は「CMB_県名」となっていますか ?
・コンボボックスの対象項目は県名のみですか ?


例では tbl参加住所サブと tbl_prf テーブルから 選択クエリーを経由して サブフォームを作ってメインフォームに都道府県のコンボボックスを配置しています。

サブフォームになるフォームは作成できますね

メインフォームは空のフォームから始めます。
1.フォームヘッダーにTbl_Pref(都道府県リスト:都道府県ID,都道府県名) のコンボボックスを配置します。
2.tbl参加住所サブを詳細欄へドラッグするとサブフォームとして配置できます。
3.サブフォームプロパティーでリンクを定義して完成です。
 ただしこの場合ナビしてくれませんので直接入力することになります。
 リンクの対象となる項目は同じデータ形式でなければなりません。
    • good
    • 0
この回答へのお礼

ありがとうございます。また、お礼が遅くなってすみません。
実は、この質問をしたあと、以前に作ったACCESSの改良をしなければいけなくなり、まだ今回の質問した分に取りかかれておりません。
回答頂いた内容は、私にはすぐ理解できるものではありません。
今やっている問題が開設次第、じっくり取りかかる予定。
そのときに、改めてお返事します。
私の勝手で申し訳ございませんが、もうしばらくお待ち頂けないでしょうか。

お礼日時:2010/05/13 00:14

ANo.1です


URLを参考にしていろいろやってみました。
出来ました!!! こんなの初めてです。

URLを参考にされたのであれば
・コンボボックス名は「CMB_県名」となっていますか ?
・コンボボックスの対象項目は「都道府県」のみですか ?
    • good
    • 0

【要旨】


サブフォームのレコードソースをクエリからテーブルに変更し、『県名』の表示を
テキストボックスから「tbl_prefテーブルを元にしたコンボボックス」に変更します。
(レコードソースを1つのテーブルとすることで、「2つのテーブルからなるクエリ」である
 ことに起因する弊害が回避されます)

【詳細】

> 何か方法はないでしょうか?

提示サイトのサンプルに対して、サブフォームでの新規追加を可能にするのでしたら、
以下の方法が簡単かと思います。

◆サブフォーム側◆
1)「≪設定1≫」で作成されたサブフォームのレコードソースを「tbl_参加住所sub」に
 差し替え
2)『県名』テキストボックスのコントロールソースを、「pref_NM」から「県No」に差し替え
3)同テキストボックスを右クリックし、「コントロールの種類の変更(H)→コンボボックス
 (C)」を選択
4)変更した『県名』コンボボックスのプロパティシートで、プロパティを以下のように設定
 『書式』タブ:
  ・列数=「2」
  ・列幅=「0cm;5cm」 (「5cm」の方は必要に応じて適当に変えてください)
 『データ』タブ:
  ・値集合タイプ=「テーブル/クエリ」 (初期設定のまま)
  ・値集合ソース=「Select pref_ID, pref_NM From tbl_pref Order by pref_ID;」
  ・連結列=「1」 (初期設定のまま)
  ・入力チェック=「はい」 (初期値は「いいえ」ですが、自動で切り替わるはず)
 ※これらの設定により、「県No」の数値に対応する県名(pref_NM)が、コンボボックスに
   表示されるようになります。
5)フォームを保存して閉じる

◆メインフォーム側◆
※サブフォームのレコードソースから「pref_NM」フィールドがなくなったのに伴う改修※
1)『cmb_県名』コンボボックスのプロパティを、サブフォームの『県名』コンボボックスと
 同様に設定(但し、コントロールソースだけは、提示サイトと同様、空白のまま)
2)『frm_sub』サブフォームの『リンク子フィールド』を、「pref_NM」から「県No」に差し替え
3)フォームを保存して閉じる


・・・以上です。
    • good
    • 0
この回答へのお礼

ありがとうございます。また、お礼が遅くなってすみません。
今回の質問をした後すぐに、以前に作ったAccessの改良をしなくてはいけなくなりました。
そのため、そちらに掛かりっきりになっており、今回の検証ができておりません。
どうも、今回の質問は、私にとって予想以上に高度なため、検証するのにかなり時間が掛かりそうです。
そのため、回答頂いたないようにたいする返事等は、もう少し掛かりそうです。
このままでは、お礼が遅くなってしまうので、先にお礼を。
後日、追加の質問等があった場合は、よろしくお願いします。

お礼日時:2010/05/13 00:27

追加/変更できないクエリの様ですね。


(複数の環境で採取された画面で説明されているようにみえます)

以下、変更の手順ではなく、新規作成する時の手順になります。


近い(テーブル・フォーム)構成にしています。
(同じ名前を使っていいのかわからなかったのでチョコチョコと変えてます)

「TPref」テーブル

PrefID PrefNM
1    北海道
2    青森県
3    岩手県
・・・・

「T参加住所」テーブル

an   県ID    住所     参加人数
1    1    札幌市中央区   420
2    13    千代田区     501
3    13    中央区      1005
・・・・

(「an」はオートナンバー)
(「PrefID」と「県ID」は同じ型)


サブフォームになるフォームの作成)

都道府県名はコンボボックスの表示でわかるので、サブフォームには「住所」「参加人数」を表示するものとします。

フォームウィザードで「T参加住所」テーブルを元に、「住所」「参加人数」を選択し、データシート形式で作成します。
フォーム名を「F参加住所」とし、閉じておきます。


メインフォームの作成)

フォームデザインから作成します。
フォームのプロパティ「レコードセレクタ」「移動ボタン」「区切り線」を「いいえ」に変更します。
コンボボックスを配置し、名前を「cmb県名」にします。
コンボボックスのプロパティで以下部分を変更します。

値集合タイプ: テーブル/クエリ
値集合ソース: SELECT PrefID, PrefNM FROM TPref;
列数: 2
列幅: 0cm;3cm (1列目は表示しないように)
連結列: 1
入力チェック: はい

既に出来上がっているフォーム「F参加住所」を、コンボボックスの下にドラッグ&ドロップします。
プロパティで名前を「FSUB」に変更します。
リンク親子フィールドには、手入力で記述していきます。
(右横に表示される「・・・」ボタンは使いません)

リンク親フィールドに、 cmb県名
リンク子フィールドに、 県ID

表示する大きさを調整します。


良かったらフォームを保存し、動作を確かめてみます。



この方法が不評であれば以下の様に変更しても。
(表示更新はこちらの方が速いようです)

リンク親子フィールドは空欄にします。

サブフォーム「F参加住所」のレコードソースを、コンボボックスを参照した条件記述に変更します。
SELECT * FROM T参加住所 WHERE 県ID = [Forms]![親フォーム名]![cmb県名];

また、「F参加住所」の挿入前処理で、登録に必要な「県ID」を親から持ってきます。
Private Sub Form_BeforeInsert(Cancel As Integer)
  If (IsNull(Me.Parent.cmb県名)) Then
    Cancel = True
  Else
    Me.県ID = Me.Parent.cmb県名
  End If
End Sub

さらに、コンボボックスのクリック時にサブフォームを再クエリします。
Private Sub cmb県名_Click()
  Me.FSUB.Form.Requery
End Sub



後は、他ページに記述されているフィルタの方法になるかと。




1番目のリンク親子フィールドを使っている時、
「F参加住所」の挿入前処理で、「cmb県名」をみて、編集状態を管理した方が・・・
NULL なら編集状態にさせない記述は、
Private Sub Form_BeforeInsert(Cancel As Integer)
  If (IsNull(Me.Parent.cmb県名)) Then
    Cancel = True
  End If
End Sub

「cmb県名」が NULL でなければ、2番目の方法とは異なり、県ID は自動で設定されます。
    • good
    • 0
この回答へのお礼

ありがとうございます。また、お礼が遅くなってすみません。
せっかく回答頂いたのですが、検証できておりません。
ACCESSで、他の仕事ができたのでそちらに掛かりっきりになっております。
私のレベルは入門程度なので、VBAの検証となると、さらに時間が必要になります。
じっくり時間を掛けることになりそうなので、追加の質問等は、さらに数日必要になりそうです。
その時はよろしくおねがします。

お礼日時:2010/05/13 00:22

>コンボボックスに連動して、サブフォームを表示させたい


コンボボックスは登録済みのデータの中から特定のデータを選ぶものです。
ここへは組み込めません。

例えば社員情報の登録フォームには所属部門の項目が必要ですこのときに利用するのがコンボボックスです。

部門登録フォームと社員登録フォームがあるとき 部門登録フォームに社員登録フォームをサブフォームとすると
上記のコンポボックスを使う必要もなくなり、部門登録フォームを開くことで部門も社員も登録できます。

サブフォームを設定するには社員のテーブルに部門テーブルの主キーの項目がありこの項目でリレーションシップが設定されている必要があります。

部門登録フォームにデザインモードでサブフォームツールを配置することから始めます
サブフォームツールは ツールバー上にあります。
「Accessのコンボボックスに連動して、」の回答画像1
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A