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

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

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

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

Access

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

Q&A

解決済

1回答

1821閲覧

フォーム内のテキストボックスの値が変更されたら、別のフォームのテキストボックスにその値が反映される

mnbwqz

総合スコア74

VBA

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

Access

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

0グッド

0クリップ

投稿2022/03/13 02:40

コントロールタブ内に設置された二つのフォームがあります。
フォーム1(ページ1タブ内)のテキストボックスtxt作成日の値に対応して
フォーム2(ページ2タブ内)のテキストボックス3か所の値が決まります。
フォーム読み込み時と、txt作成日の値が変更される場合、両方の場合に
同じ処理になります。

イメージ説明

イメージ説明

AccessVBA

1(フォーム1) 2Private Sub Form_Load() 3 txt作成日 = Date 4End Sub 5 6Private Sub txt作成日_AfterUpdate() 7 [Forms]![メインフォーム]![フォーム2]![txt当日] = txt作成日 8 [Forms]![メインフォーム]![フォーム2]![txt1か月後] = DateAdd("m", 1, txt作成日) 9 [Forms]![メインフォーム]![フォーム2]![txt2か月後] = DateAdd("m", 2, txt作成日) 10End Sub 11 12(フォーム2) 13Private Sub Form_Load() 14 txt当日 = [Forms]![メインフォーム]![フォーム1]!txt作成日 15 txt1か月後 = DateAdd("m", 1, [Forms]![メインフォーム]![フォーム1]!txt作成日) 16 txt2か月後 = DateAdd("m", 2, [Forms]![メインフォーム]![フォーム1]!txt作成日) 17End Sub

そこで次のように、標準モジュール内の関数を呼び出すように
コードを書き換えました。

AccessVBA

1(フォーム1) 2Private Sub txt作成日_AfterUpdate() 3 EnterDate 4End Sub 5 6(フォーム2) 7Private Sub Form_Load() 8 EnterDate 9End Sub 10 11Sub EnterDate() 12 [Forms]![メインフォーム]![フォーム2]!txt当日 = [Forms]![メインフォーム]![フォーム1]!txt作成日 13 [Forms]![メインフォーム]![フォーム2]!txt1か月後 = DateAdd("m", 1, [Forms]![メインフォーム]![フォーム1]!txt作成日) 14 [Forms]![メインフォーム]![フォーム2]!txt2か月後 = DateAdd("m", 2, [Forms]![メインフォーム]![フォーム1]!txt作成日) 15End Sub

ただ、処理はフォーム2内のテキストボックスの変更なので、
コードは、標準モジュールではなくフォーム2に書ければと思っています。
フォーム2の方で、フォーム1のtxt作成日の変化を検知する方法があれば、
その方法を使ってフォーム2に書きたいです。
そのような方法はありますでしょうか。

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

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

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

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

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

guest

回答1

0

ベストアンサー

WithEventsをつけてテキストボックス変数を宣言すれば、別フォームのコントロールのイベントも記述できます。

フォーム2のモジュール

vba

1Option Compare Database 2Option Explicit 3Dim WithEvents tb As TextBox 4 5Private Sub Form_Load() 6 EnterDate 7 Set tb = Me.Parent![フォーム1]!txt作成日 8 tb.AfterUpdate = "[イベント プロシージャ]" 9End Sub 10 11Sub EnterDate() 12 Me!txt当日 = Me.Parent![フォーム1]!txt作成日 13 Me!txt1か月後 = DateAdd("m", 1, Me!txt当日) 14 Me!txt2か月後 = DateAdd("m", 2, Me!txt当日) 15End Sub 16 17Private Sub tb_AfterUpdate() 18 EnterDate 19End Sub

投稿2022/03/13 03:23

hatena19

総合スコア33715

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

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

mnbwqz

2022/03/13 07:52

ありがとうございます。 フォーム2(ページ2タブ内)のコードだけで、フォーム1の変更を反映するようになりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問