Access VBAでコーディングをしていくと、複数箇所で同じ処理をする場合が出てきます。そのようなときに、複数箇所で同じ処理を記載することは手間がかかりますし、また、保守性の観点からも非常に効率が悪いものになります。
そこで、特定の処理をプロシージャ(呼び出されるプロシージャをサブプロシージャと呼びます。)として記載し、処理が必要になった場合には、このサブプロシージャを呼び出して処理をさせる方法が有効です。
このとき、サブプロシージャを呼び出すために「Call」ステートメントを使用します。
今回は、Callステートメントの使い方について、簡単なサンプルを交えながら紹介します。
処理内容について
説明を簡単にするため、処理内容については次のようにします。
① 「5」と「10」を足すためのサブプロシージャ(Two_Param_Sumプロシージャ)を呼び出す。
② サブプロシージャで「5」と「10」を足して結果をイミディエイトウィンドウに表示する。
③ 「100」と「200」を足すためのサブプロシージャを改めて呼び出す。
④ サブプロシージャで「100」と「200」を足して結果をイミディエイトウィンドウに表示する。
ここで、プロシージャの作成方法やイミディエイトウィンドウが何処にあるかについては以下の記事でも紹介をしていますので、ご参照ください。
また、イミディエイトウィンドウに値を表示する方法は「Debug.Print」を用います。
それでは、次から具体的な実装方法を見ていきましょう。
Callステートメントを用いた実装
まずは、Microsoft Visual Basic for Applicationsの画面を開き(画面を開くためのショートカットキーは「Art + F11キー」です。)挿入タブをクリックし、標準モジュールを選択します。
これで標準モジュールに「Module1」が追加されます。ここで、イミディエイトウィンドウが表示されていない場合は、画面上部の「表示」タブの中からイミディエイトウィンドウを見つけてクリックしてください。
続いて、Module1の中にサブプロシージャを呼び出す側のプロシージャ(これを親プロシージャと呼びます。)としてCalcプロシージャを作成していきます。
画面上部の「挿入」タブから「プロシージャ」を選択し、プロシージャの追加画面を開きます。
プロシージャの名前を「Calc」、種類は「Subプロシージャ」、適用範囲は「Publicプロシージャ」にチェックを入れ、「OK」をクリックします。
同様にサブプロシージャである「Two_Param_Sum」を作成します。(作成方法はCalcプロシージャと同じです。あるいは、コードウィンドウに直接コードを書き込んでも構いません。)
作成した各プロシージャに以下のコードを追記して全体の処理を完成させます。
Public Sub Calc() '①~②の処理 Call Two_Param_Sum(5, 10) '③~④の処理 Call Two_Param_Sum(100, 200) End Sub Public Sub Two_Param_Sum(Num1 As Integer, Num2 As Integer) Debug.Print Num1 + Num2 End Sub
コード追加後は図4のようになります。
ここで、改めて処理の内容について確認していきます。まずCalcプロシージャでは、1回目の処理で Two_Param_SumサブプロシージャをCallステートメントで呼び出していますが、この際に「5」と「10」の二つの引数を渡しています。この段階でいったんサブプロシージャに処理が引き渡されます。そして、2回目の処理では、引数が「100」と「200」になっていますね。
Two_Param_Sumサブプロシージャでは、Callステートメントで呼び出された際に、二つの引数をInteger型として受け取り、これら値を足した結果を「Debug.Print」によりイミディエイトウィンドウに表示する処理をしています。
以上で、実装ができましたので、処理の様子を確認しましょう。
処理の確認
Module1を開いた状態で、画面上部の「▶」アイコンをクリックします。
続いて、「マクロ」画面で「Calc」を選択して「実行」をクリックします。これにより、先に作成した処理が行われます。
この結果、先に紹介した処理により、図6に示すようにイミディエイトウィンドウに計算結果として、「15」と「300」が表示されることを確認できました。
まとめ
今回はAccess VBAにおいてサブプロシージャを呼び出す方法としてCallステートメントについて紹介しました。
同じ処理を繰り返す場合に、サブプロシージャを作成しておくことで、無駄な作業を省くことができ、保守性も向上させることができますので、開発の際にはぜひCallステートメントによるサブプロシージャをご活用ください。
スポンサーリンク
コメント