このような場合の最善の方法は、一連の変数を渡そうとしないことです。コードが多すぎて、柔軟性に欠けます。たとえば、2 つの値を渡す必要がある場合、その要件が 5 つの値に増加すると、何年にもわたって何が起こるでしょうか? 大量の値を保持して渡そうとするのは、コーディング作業が多すぎます。
ms-access の各フォームは、実際にはコードで操作できるクラス オブジェクトであることに注意してください。したがって、ここでオブジェクト アプローチを使用すると、記述するコードが少なくなるだけでなく、コードがよりクリーンでモジュール化され、グローバル変数が不要になり、記述したコードをさまざまな形式で再利用できることがわかります。
方法は次のとおりです。
一般に、あるフォームがフォームのオープン イベントで 2 番目のフォームで別のフォームを起動すると (実際には、ロード イベントの最後まで使用することもできます)、PREVIOUS フォーム オブジェクトへの参照を取得できます。つまり、ここではオブジェクト アプローチを使用できます。
フォーム モジュール レベルでは、フォームのフォーム オブジェクトを次のように宣言します。
Option Compare Database
Option Explicit
dim frmPrevious as form
次に、フォームのオンロード イベントで、次のようにします。
Set frmPrevious = Screen.ActiveForm
これで、フォーム内のすべてのコードで、コード、イベント、コード内の前のフォームから public として宣言された変数でさえも自由に使用できるようになりました。
したがって、以前の形式のディスク書き込みを強制し、データを再ロードする場合。
frmPrevious.Refresh
ID 値を設定する場合は、次のようにします。
frmPrevious!ID = some value
また、form previous をそのフォームの PUBLIC 変数として宣言することもできることに注意してください。
frmPrevious.frmPrevious!ID = some value
そのため、各フォーム コード モジュール (または少なくともコードで値を使用する必要があるモジュール) でフォーム オブジェクトを宣言するだけです。上記は、すべてのコードが前のフォーム オブジェクトへの既製の参照を持っていることを意味します。フォームでパブリックとして宣言された関数は、フォームのメソッドになり、次のように実行できます。
frmPrevious.MyCustomRefresh
または、前のフォームに請求書番号を生成して設定するように強制するオプションのようなものさえあります。
frmPrevous.SetInvoice
また
frmPrevious.SetProjectStatusOn
したがって、値とデータを前後にシャッフルできるだけでなく、前のフォームのコードで作成した機能や関数を簡単に実行できます。
実際、コーディング標準として、私のフォームのほとんどには という public 関数がありMyRefresh
ます。
このアプローチの優れた点は、以前のフォームから値を読み取り、使用し、値を設定できることです。これにより、コードで値を受け取るだけでなく、以前の形式で値を設定することもできます。したがって、このアプローチは双方向です。フォーム間でデータと値をシャッフルできます。ここでのもう 1 つの利点は、変数だけに制限されるのではなく、フィールド、コントロール値 (イベント、プロパティ) などを使用できることです。
このアプローチは、以前のフォームの多くがすぐに利用できることを意味します。
したがって、大量の変数を渡そうとしないでください。フォームへの参照を渡すと、既製のオブジェクトが手元にあり、この種のコーディングの問題が簡単になります。