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

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

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

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

Access

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

Q&A

解決済

1回答

15661閲覧

Access VBA コントロール名を変数で指定

Yoshikun_0945

総合スコア224

VBA

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

Access

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

1グッド

2クリップ

投稿2019/11/04 04:48

編集2019/11/04 05:08

前提・実現したいこと

Access VBAにてコントロール名を変数にて指定し、Value = などの処理を実行するシステムを作成しています。
この方法をフォームに設置しているサブフォームエリア内のコントロールに対して適用させようとしたら、エラーが発生しました。

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

フォームに設置しているコントロールには適用できましたが、フォームに設置しているサブフォームエリア内のコントロールに適用するにはどのように修正すればよろしいでしょうか?

該当のソースコード

VBA

1Dim FormName, TxtName As String 2'親フォーム名とサブフォームエリア名を変数に格納する 3FormName = "F02_2_注文画面.F02_1_入力画面" 4'テキストボックス名を変数に格納する 5TxtName = "Txt_b1" 6'親フォームに設置しているサブフォームエリア内のコントロールに適用する 7Forms(FormName).Controls(TxtName).Value = "12345"

補足情報

1:開発中のシステムの都合上、親フォーム内に設置しているサブフォームは、テーブルやクエリと連結できない非連結型のフォームのため、親フォーム内のサブフォームエリアに表示しているコントロールのプロパティを操作することになります。

2:プロパティを操作するテキストボックスが多いため、変数で指定する方式を採用したいです。

3:親フォーム名 → "F02_2_注文画面"
4:サブフォーム名兼サブフォームエリア名 → "F02_1_入力画面"
5:プロパティを操作するテキストボックス名 → "Txt_b1"など
※プロパティを操作するテキストボックスはたくさんあり、"Txt_"までは同じで、アンダーバーのあとのアルファベット1字と数字がテキストボックスごとに異なるようになっております。

VBA

1'変数化する前のコード 2Forms!F02_2_注文画面.F02_1_入力画面.Form!Txt_b1.Value = "12345"
mnbwqz👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

親フォーム名、サブフォーム名、コントロール名をそれぞれString型の変数に格納することになります。

vb

1Dim mFormName As String, sFormName As String, TxtName As String 2Forms(mFormName).Controls(sFormName).Form.Controls(TxtName).Value = "12345"

このようにすると、常にサブフォームに配置してあるという前提でしか使えません。

フォームはオブジェクト変数に格納するとメインフォームでもサブフォームでも問題なく格納できるので便利です。

サブフォームとして開いたときのコード例
Txt_b1~Txt_b9 まで"12345" を代入する

vb

1Dim frm As Form 2Set frm = Forms!F02_2_注文画面!F02_1_入力画面.Form 3 4Dim txtName As String 5txtName = "Txt_b" 6For i = 1 to 9 7 frm.Controls(TxtName & i).Value = "12345" 8Next

メインフォームとして開いたときのコード例

vb

1Dim frm As Form 2Set frm = Forms!F02_1_入力画面 3 4Dim txtName As String 5txtName = "Txt_b" 6For i = 1 to 9 7 frm.Controls(TxtName & i).Value = "12345" 8Next

メインフォーム上のサブフォームから、同じメインフォーム上の別のサブフォームのコントロールを参照する場合のコード例

vb

1Dim frm As Form 2Set frm = Me.Parent!F02_1_入力画面.Form 3 4Dim txtName As String 5txtName = "Txt_b" 6For i = 1 to 9 7 frm.Controls(TxtName & i).Value = "12345" 8Next

投稿2019/11/04 07:36

編集2019/11/04 08:27
hatena19

総合スコア33715

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

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

Yoshikun_0945

2019/11/04 07:44

大変助かりました。 ありがとうございました 今後ともよろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問