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

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

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

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

Access

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

コンボボックス

GUIの要素のひとつです。Listboxと同様にいくつかのうちひとつを選択する機能だが、Comboboxの場合は選択されたもののみがデフォルトとして表示される。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

2回答

1119閲覧

Access 2つのコンボボックスによる絞り込み機能について

ryoya_access

総合スコア34

VBA

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

Access

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

コンボボックス

GUIの要素のひとつです。Listboxと同様にいくつかのうちひとつを選択する機能だが、Comboboxの場合は選択されたもののみがデフォルトとして表示される。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2020/07/31 07:32

編集2020/08/05 07:26

実現したいこと

Access(2007-2016)で勤怠管理DBを作成しています。

2つのコンボボックスによる絞り込み機能(参考:https://www.accessdbstudy.net/entry/20080515/p1)を実装中なのですが、思うように動作しないため、こちらで質問させていただくことにしました。

以下、詳細になります。

テーブルとリレーション

〇使用テーブルは7つで、以下のようにリレーションを組んでいます。

イメージ説明

1.顧客テーブル---------------
顧客ID:オートナンバー
顧客名:短いテキスト

顧客ID 顧客名
1 ○○商事
2 ○○広告
3 ○○電気

2.受注テーブル---------------
受注No:オートナンバー
受注日:日付
顧客ID:数値

受注No 受注日 顧客ID
1 2020/07/01 1
2 2020/07/01 2
3 2020/07/01 3

3.受注明細テーブル-------------
受注No:数値
タスクID:数値
予算額:数値

受注No タスクID 予算額
1 2 200
1 3 300
2 1 10
2 2 20
2 3 30
2 4 40
2 5 50
3 4 40
3 5 50

4.タスクテーブル----------------
タスクID:オートナンバー
タスク名:短いテキスト

タスクID タスク名
1 業務A
2 業務B
3 業務C
4 業務D
5 業務E

5.勤怠テーブル----------------
勤怠管理No:オートナンバー
社員ID:数値
出社日:日付
出社時間:日付/時刻
退社時間:日付/時刻

勤怠管理No 社員ID 出社日 出社時間 退社時間
1 1 2020/07/02
2 2 2020/07/02
3 3 2020/07/02
4 1 2020/07/03
5 2 2020/07/03
6 3 2020/07/03
7 4 2020/07/03
8 5 2020/07/03
9 3 2020/07/07

6.稼働テーブル------------------
稼働管理No:オートナンバー
勤怠管理No:数値
受注No:数値
タスクID:数値
稼働時間:数値

稼働管理No 勤怠管理No 受注No タスクID 稼働時間
1 1 1 3 4
2 1 1 2 5
3 1 3 5 2
4 2 1 2 3
5 2 2 1 3
6 3 3 5 2
7 4 3 4 10
8 5 3 4 6
9 5 1 3 7
10 6 1 2 8
11 7 2 5 9
12 7 3 4 4
13 8 3 4 3
14 9 3 5 4

7.社員テーブル------------------
社員ID:オートナンバー
社員名:短いテキスト
時給:数値

社員ID 社員名 時給
1 一郎 100
2 二郎 200
3 三郎 300
4 四郎 400
5 五郎 500

###フォーム

以上のテーブルのうち、「勤怠テーブル」と「稼働テーブル」を用いて、勤怠登録用のサブフォーム付きフォームを作成しました。メインフォームを「F_勤怠」、サブフォームを「F_稼働」としています。

イメージ説明

![イメージ説明]

このうち「社員ID」を「社員名」、「受注No」を「クライアント名」、「タスクID」を「タスク名」のコンボボックスに変換し、タスク名を入力する際、クライアント名によって絞り込みを行いたいと考えています。

※ラベル「クライアント名」のコンボボックスをcmb_A、ラベル「タスク名」のコンボボックスをcmb_Bとします。

![イメージ説明

cmb_Bのコントロースソースは、以下のようになっています。

イメージ説明

参考にしたサイトではこれで動いたと思うのですが、下記のようなメッセージボックスが表示されてしまいます。

イメージ説明

このエラーはどのようにすれば解消でき、絞り込みが行えるのでしょうか。
お力をお貸しいただきたいと思います。よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

サブフォーム上のコントロールを参照する場合は、下記のようなフォーマットになります。

Forms!メインフォーム名!サブフォームコントロール名.Form!コントロール名

サブフォームコントロール名は、サブフォーム名ではなく、サブフォームを埋め込んでいるメインフォーム上のコントロール(サブフォームコントロール)の名前です。


上記の点を考慮してパラメータの参照式を変更すれば今回の質問の現象は解消できます。

ただし、帳票フォームでコンボボックスの絞り込みは簡単ではないです。

例えば、cmb_A の表示をクライアント名にしてますが、
一つのクライアントから複数の受注を受ける可能性がありますよね。
その場合、想定の受注Noが格納されるとは限りません。

また、cmb_B のリストを絞り込むと他のレコードのタスク名が表示されなくなる場合があります。

上記の点の対策を考える必要が出てくるでしょう。

投稿2020/07/31 08:14

hatena19

総合スコア33715

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

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

ryoya_access

2020/07/31 11:07

ご回答ありがとうございます、コメント頂いたようにまだ課題は残りますが、質問させていただいた内容については無事解決しました。
ryoya_access

2020/08/05 07:26 編集

ありがとうございました。
guest

0

パラメータの入力を求められるのは、指定した名称が無い(または参照できない)ような時です。
手動での入力ではなくビルドボタン(・・・)を利用した方が間違いが少なくて済みます。

投稿2020/07/31 08:11

sazi

総合スコア25186

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問