質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.54%

  • VBA

    2255questions

    VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

  • Access

    579questions

    Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

ポップアップ画面から複数行あるサブフォームへの代入について

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,549
退会済みユーザー

退会済みユーザー

前提・実現したいこと

請求書を入力するフォームがあり、メインフォームには取引先の社名・住所・TELのテキストボックスがあり、サブフォームに請求書の明細行(品名・個数・税抜金額・消費税)があるようなフォームを作っています。

テキストボックスの入力欄はなるべくマスタを参照するように設計しており、取引先名のテキストボックスをダブルクリックすると、取引先マスタを一覧表示させたウインドウをポップアップで表示させ、選択行の社名や住所をメインフォームのテキストボックスに代入するようにVBAで組んでいます。

そこでサブフォーム内の明細行にある品名なども、ポップアップで表示させたマスタの一覧にある選択行の品名・税抜金額・消費税を、サブフォームに代入させたく思っているのですが、明細行の何行目にセットすればいいのかを判別できず全明細行に代入されてしまいます。

お手数お掛けしますが、ご存じの方いらっしゃれば、ご教授お願いします。

発生している問題・エラーメッセージ

該当のソースコード

' 品名
Forms!F_請求書入力!FS_請求明細.Form!txt_品名 = Me.txt_品名
' 税抜金額
Forms!F_請求書入力!FS_請求明細.Form!txt_税抜金額 = Me.txt_税抜金額
' 消費税
Forms!F_請求書入力!FS_請求明細.Form!txt_消費税 = Me.txt_消費税

※[Me.txt_〇〇〇]はポップアップで表示されたマスタ一覧画面です。

試したこと

補足情報(言語/FW/ツール等のバージョンなど)

Access2010、VBA、Windows10

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

品名・税抜金額・消費税を、サブフォームに代入させたく思っているのですが、明細行の何行目にセットすればいいのかを判別できず全明細行に代入されてしまいます。

サブフォームの品名・税抜金額・消費税の各テキストボックスが非連結(コントロールソースを設定していない)になってませんか。なっていないなら、連結(コントロールソースにフィールド名を設定)してください。

あと、データベースの設計には「テーブルの正規化」という原則があるのはご存知ですか。もしこのキーワードが初耳でしたら、一度WEB検索して内容を理解されることをお薦めします。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/02/22 08:36

    おはようございます。 回答いただきありがとうございます。
    非連結でないと、一覧表示しているポップアップウインドウのマスタ一覧から、値をセットできないと思っているのですが…。

    キャンセル

  • 2017/02/22 09:31

    非連結では、各レコード毎に別の値を格納することはできません。
    帳票フォームでレコード数分テキストボックスがあるように見えますが、
    実際はテキストボックスは一つですので(デザインビューで確認してみてください)。

    連結の場合は、テーブルのフィールドに値を格納できるので、各レコード毎に値を格納できます。
    その値を帳票フォームの各レコード毎に表示しています。

    ですので、帳票フォームの各レコード毎に値を表示させるには、レコードソースのテーブルに、品名・税抜金額・消費税のフィールドを持たせて、それとテキストボックスを連結します。そうすれば代入することができます。

    ただし、明細テーブルに品名・税抜金額・消費税のフィールドも持たせるのは、「テーブルの正規化」という原則から外れた設計です(あえてそうする場合もありますが。)商品マスターの方に、品名・税抜金額・消費税を持たせて、クエリで参照するという方法が本来の方法です。

    これらのことが理解できているかどうか、疑問があったので「テーブルの正規化」についてご存知ですか、と聞いています。

    キャンセル

  • 2017/02/22 11:37

    テキストボックスのコントロールソースに、サブフォームのレコードソースに設定している[請求書明細tmpテーブル]の品名を設定することで、アクティブな明細行に[品名]をセットできるようになりました。
    [コントロールソース]にフィールド名を設定するのは、照会画面等の場合のみ有効なものと思っていました。
    ご教授いただきありがとうございました。

    キャンセル

  • 2017/02/22 11:40

    「テーブルの正規化」については、過去に汎用機COBOL等の経験もあるので、『それなり』に知っているつもりです。

    キャンセル

同じタグがついた質問を見る

  • VBA

    2255questions

    VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

  • Access

    579questions

    Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。