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

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

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

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

Access

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

Q&A

1回答

2359閲覧

ACCESS Me.RecordSource 実行後のコンボボックス、ラベルの動き

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

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

Access

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

0グッド

0クリップ

投稿2020/09/24 00:56

前提・実現したいこと

当方ACCESS、プログラミング初心者です

1.コンボボックスで値を選択、その選択した値を横のラベルに表示する。
2.コンボボックスにAfterUpdateイベントを用意しておき、コンボボックスの値が変更された際に選択した値を用いMe.RecordSourceでレコードソースを抽出する。
3.各ラベル等に設定していたコントロールソースを元に先ほどMe.RecordSourceで設定したレコードソースの値が入る。

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

ブレイクポイントを挿入し検証

1.コンボボックスで選択した値がラベルに表示される。
2.値を選択後AfterUpdateが発動しMe.RecordSourceが実行される。

問題→コンボボックスで選択した値を表示するラベルの値がクリアされてしまう
※コンボボックスの値を基に抽出したレコードソースの値は各ラベルにきちんと表示されています。
※コンボボックスで選択した顧客IDで抽出したレコードソースが存在する場合は顧客名称は表示される

該当のソースコード

コンボボックスにプロパティシートから値集合ソースを設定します。今回は顧客マスタを設定しています(顧客IDと顧客名称)
コンボボックスで選択した値をラベルに表示させます。コンボボックスで顧客IDを選択しその横のラベルに顧客名称を表示させます
顧客名称を表示させるラベルにはプロパティシートからコントロールソースに=[顧客ID].Columnと設定しています。
コンボボックスにはAfterUpdateイベントを用意しておりAfterUpdateで下記のSetRecordSource()が実行されます。
Private Sub SetRecordSource()
Dim strSQL As String

strSQL = "" strSQL = strSQL & "select " strSQL = strSQL & " * " strSQL = strSQL & " from " strSQL = strSQL & " 顧客買い物 "

  strSQL = strSQL & "Where"
strSQL = strSQL & "'" & コンボボックスの値 & "'"

Me.RecordSource = strSQL Me.Requery Me.Recalc

End Sub

試したこと

ブレイクポイントを用いてMe.RecordSource = strSQLを実行しレコードソースが変更されると顧客名称を表示するラベルがクリアされることが分かった。

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

ACCESS2019

ここにより詳細な情報を記載してください。

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

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

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

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

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

hatena19

2020/09/24 05:05

> 顧客名称を表示させるラベルにはプロパティシートからコントロールソースに・・・ ラベルにはコントロールソースはないですが、これはテキストボックスのことですか。
退会済みユーザー

退会済みユーザー

2020/09/24 08:24

ラベルと記述している部分はすべてテキストボックスです。 失礼いたしました。
hatena19

2020/09/24 09:47

コンボボックスの下記プロパティの設定を質問に追記してください。 コントロールソース 連結列 値集合ソース 列幅
退会済みユーザー

退会済みユーザー

2020/09/29 12:39

返信遅くなり申し訳ありません。 コントロールソース:空白 値集合ソース   :M_顧客 連結列1     :1 列幅       :3cm;8cm です
guest

回答1

0

RecordSource の変更を行った場合、Requeryしなくとも自動的に反映されるはずです。
RequeryおよびRecalcをコメントアウトするとどうなりますか。

また、SQLのwhere条件については誤記だと思いますが、コンボボックスの参照をSQL内に埋め込めば、RecordSource の変更は不要になります。

投稿2020/09/24 03:06

sazi

総合スコア25138

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

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

退会済みユーザー

退会済みユーザー

2020/09/24 08:29

ご回答ありがとうございます。 Requery、Recalcをコメントアウトしても変化はありませんでした。 Recordsourceの行を実行したタイミングで名称表示用のテキストボックスがクリアされてしまいます。 コンボボックスの参照については試してみます!
sazi

2020/09/24 09:33

名称表示用のテキストボックスに対しての処理がどこかで呼ばれていたりしないですか? VBAで記述されているのは検索で何とか見つかりますけど、マクロとかだと探しづらいですけどね。
退会済みユーザー

退会済みユーザー

2020/09/29 12:43

返信遅くなり申し訳ありません。 VBAのエディタでテキストボックスを探してみましたが特にイベント等使用はございませんでした。 マクロは特に作成しておりませんのでございません。 現状対策としてコントロールソース変更後イベントの処理後、変更されるテキストボックスをサブフォームにする事で実現したい状態になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問