🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VBA

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

Access

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

Q&A

解決済

1回答

1624閲覧

レコード抽出フォームから,一部のテキストボックスに内容を表示させた状態の別のテーブルへの抽出フォームを開きたい

jamada

総合スコア7

VBA

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

Access

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

0グッド

0クリップ

投稿2019/12/13 03:32

編集2019/12/13 06:10

いつも回答いただきましてありがとうございます。
またつまづいてしまったので質問させてください。

Aのテーブルから抽出されたレコードA-1の,あるフィールドを,Bテーブルが元になる別フォームの特定のテキストボックスに反映させたいのですが,可能でしょうか。

また,AテーブルとBテーブルにはリレーションシップが設定されていますが,抽出されたレコード情報A-1を基に,別フォームにはレコードを抽出できますでしょうか。

別フォームのすべてのテキストボックスに反映させようとしてしまう方法しか見つからず……
お手数をかけますが方法をご教示いただけますでしょうか。

内容

テーブルT_案件からF_案件詳細にレコードを抽出し,同画面にボタンcmd行動履歴OPENを設置しています。T_案件にはフィールド「依頼者」「案件名」があり,F_案件詳細に抽出されるようになっています。

また,テーブルT_行動履歴に入力するためのF_行動履歴のフォームヘッダーには,F_案件詳細で抽出されたフィールド「依頼者」「案件名」を反映し表示しておくための「txt依頼者」と「txt案件名」を配置,
フォーム詳細にはT_行動履歴への入力用のテキストボックスがありますが,こちらにはレコードを反映させたくありません。

2つのテーブルはT_案件にある案件IDでリレーションシップを設定しています。

情報が不足しているようであればお教えください。
何卒宜しくお願いいたします。

### 追記
作成したクエリです。
下記クエリで確かに依頼者・案件名はでました。ありがとうございます。

SQL

1SELECT T_行動履歴.行動ID連番, T_行動履歴.行動ID, T_行動履歴.日付,T_行動履歴.開始時間, T_行動履歴.終了時間, T_行動履歴.記録者, T_行動履歴.行動種別, T_行動履歴.内容, T_行動履歴.案件ID, T_案件.依頼者ID, T_案件.案件名ID, 2FROM T_案件 RIGHT JOIN T_行動履歴 ON T_案件.[案件ID] = T_行動履歴.[案件ID];

ただ,もうしわけありません,やりたいことの言葉がたりていない質問をしてしまいました。

◆T_案件 から抽出したレコードと紐づいた依頼者・案件名を F_行動履歴 ヘッダーに表示する
かつ
F_行動履歴 詳細には T_案件 で抽出したレコード(案件ID)に紐づいた行動履歴のレコードを抽出したい(新規レコードの追加もしたい)

のでした。言葉足らずで申し訳ありません。

例)
T_案件 から案件IDが「1」のレコードを抽出して,その状態で F_行動履歴 を開くと
ヘッダーに依頼者・案件名が表示され,詳細にはあらかじめ案件ID「1」が入力された状態のT_行動履歴の帳票レコードがフォームで表示されている

伝わりますでしょうか…
宜しくお願いします。

追記2 現在のコード

教えていただいたように下記を記述しました。
が,「このオブジェクトに値を代入することはできません。」とエラーになってしまいました。

AccessVBA

1 2Option Compare Database 3Option Explicit 4 5Private Sub Form_Open(Cancel As Integer) 6 With Forms!F_案件詳細 7 Me.txt依頼者ID = !依頼者ID 8 Me.txt案件名ID = !案件名ID 9 Me.案件ID.DefaultValue = !案件ID 10 Me.Filter = "案件ID=" & !案件ID '数値型の場合 11 Me.FilterOn = True 12 End With 13End Sub

依頼者ID,案件名ID,はどちらのテーブルでもテキスト型。案件IDのみどちらも数値型です。
デバッグでカーソルを合わせると F_案件詳細 の依頼者IDや案件IDは参照できているようです。
下記イミディエイトウインドウにて

?Me.txt依頼者ID = !依頼者ID Null ?Me.txt依頼者ID Null ?!依頼者ID K1001 '正常に参照できているようです ```---

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

2つのテーブルはT_案件にある案件IDでリレーションシップを設定しています。

それならば、F_行動履歴 のレコードソースを2つのテーブルをリンクさせたクエリして、依頼者、案件名フィールドを表示させるようにしておけば、F_行動履歴で表示させることは可能です。
F_行動履歴で依頼者、案件名は更新されるとまずいと思いますので、「編集ロック」を「はい」に設定しておくといいでしょう。

質問の追記への回答

F_行動履歴 のレコードソースは T_行動履歴
詳細セクションにはフィールドをテキストボックスとして配置。

F_行動履歴の開く時イベントに下記のコードを記述。

vba

1Private Sub Form_Open(Cancel As Integer) 2 With Forms!F_案件詳細 3 Me.txt依頼者 = !依頼者 4 Me.txt案件名 = !案件名 5 Me.案件ID.DefaultValue = !案件ID 6 Me.Filter = "案件ID=" & !案件ID '数値型の場合 7 Me.FilterOn = True 8 End With 9End Sub

以上です。

投稿2019/12/13 03:48

編集2019/12/13 05:16
hatena19

総合スコア34073

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jamada

2019/12/13 04:21

ありがとうございます。T_行動履歴 T_案件 から Q_行動履歴 を作成し,依頼者と案件名を T_案件 から選択しフィールドにしました。クエリをレコードソースにして,F_行動履歴 には依頼者と案件名を表示させるtxtボックスを配置しました。 そして,データが入っているレコードから F_行動履歴 を開いても,依頼者と案件名のデータが表示されません…。フォーム詳細のT_行動履歴にあるデータは出てくるのですが…。なにか別でやらなければいけないことがありますでしょうか。。
hatena19

2019/12/13 04:26

Q_行動履歴 を開いたとき、依頼者と案件名は表示されていますか。 表示されていないならクエリの設計が間違っているのでしょう。 そのSQL文を質問に追記してください。 クエリで表示されるが、フォームのテキストボックスのコントロールソースが、それぞれ、依頼者、案件名 になっているか確認ください。
jamada

2019/12/13 04:27

すみません,というより,これだと全件表示されてしまいますね。すみません。もともとはコマンドボタンの更新後のイベント処理でRecordsetのイベントプロシージャを設定していたのですが,消したのでした。またやってみます。
hatena19

2019/12/13 04:50

依頼者、案件名はフォームヘッダーに配置すればいいのでは。
jamada

2019/12/13 05:05

現在もヘッダーなのです… RecordsetのVBAを使うと,詳細部のボックスに #name が表示されてしまいます。 クエリは作動しました。ありがとうございました。質問を編集しました…やりたいことをなかなか言葉にできていなくて申し訳ありません
jamada

2019/12/13 05:21

まさにこれをやりたかったのです!!! DefaultValue で規定値を入力し,それでフィルターをかけるのですか! ない頭でうなっていても全然思いつきませんでした。ありがとうございます。 また引き出しが少し増えました!
hatena19

2019/12/13 05:26

このへんは連結フォームの基本をしっかり理解しておくことですね。 Accessは基本機能で大抵のことはできますので、それを活用すればVBAもシンプルなります。 それを理解せず Recordset でどうのこうというのは十年早いです(失礼ご容赦) メインサブフォーム形式のフォームにすればVBAコードなしに同じことが実現できますので、興味があったら調べてみてください。
jamada

2019/12/13 05:56 編集

ありがとうございます。失礼ではありません,早いのは承知で,やらねばならぬためにコードをお借りしたりなんだりで進めてしまっているのですから。サブフォームでは実はできたのです!ありがとうございます。ただ,(Accessをやっていない上司からの)要望が,サブフォームは見た目が悪いから他のを研究して…とのことで…申し訳ありません。そしてエラーとなってしまいました。質問追記しましたのでお手がすいていましたらまた見ていただけますと大変助かります。 いや,やっぱりやめます!ひとまずサブフォームでごり押しして,時間をかけて自分で探ってみます!いつもご丁寧にほんとうにありがとうございます!
hatena19

2019/12/13 05:58

イミディエイトウィンドウで ?Forms!F_案件詳細!依頼者ID とするとどうなりますか。
jamada

2019/12/13 06:02

ありがとうございます,依頼者IDがでます
hatena19

2019/12/13 06:05

txt依頼者IDテキストボックスのコントロールソースは空欄になってますか。 式等が設定してあると代入できないです。
jamada

2019/12/13 06:09

あ,本当です!非連結にするのでした!(hatena19さんのブログで勉強したはずでした)いまみたら,クエリのままでした,なんと単純な………エラーから簡単なミスが思い浮かばないのもいけませんね…でも,これで可能になりました。本当に解決です。いろいろとありがとうございました…!!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問