呼び出すプロシージャを文字列で指定する方法
スポンサーリンク
Excel VBA では、 Application.Run を使用することで、呼び出すプロシージャを文字列で指定することができます。 Application.Run でプロシージャを呼び出す場合は、モジュール名の指定が必須になります。
引数無しの関数を呼び出す場合
次のサンプルコードでは、 main から test1 を呼び出しています。
Moduele1のソースコード | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | Option Explicit Sub main() Dim execScript As String '呼び出すプロシージャは必ずモジュール名も一緒に指定する execScript = "Module1.test1" Application.Run execScript End Sub Sub test1() Debug.Print "test1を実行しました。" End Sub |
上記の main を実行した結果は次の通りです。
実行結果 | |
1 | test1を実行しました。 |
引数が1個の場合
次のサンプルコードでは、 main から test1 を呼び出しています。その際、 test1 の第 1 引数に "AAA" を渡しています。
Moduele1のソースコード | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | Option Explicit Sub main() Dim execScript As String '呼び出すプロシージャは必ずモジュール名も一緒に指定する execScript = "Module1.test1" Application.Run execScript, "AAA" End Sub Sub test1(ByVal param1) Debug.Print "test1を実行しました。" Debug.Print "1個目の引数の値は" & param1 End Sub |
上記の引数は次のように予め文字列に組み込んでおくこともできます。
Moduele1のソースコード | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | Option Explicit Sub main() Dim execScript As String '呼び出すプロシージャは必ずモジュール名も一緒に指定する execScript = "Module1.test1(""AAA"")" Application.Run execScript End Sub Sub test1(ByVal param1) Debug.Print "test1を実行しました。" Debug.Print "1個目の引数の値は" & param1 End Sub |
上記の main を実行した結果は次の通りです。
実行結果 | |
1 2 | test1を実行しました。 1個目の引数の値はAAA |
引数が複数の場合
Moduele1のソースコード | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | Option Explicit Sub main() Dim execScript As String Dim param1 As String Dim param2 As String Dim param3 As String '呼び出すプロシージャは必ずモジュール名も一緒に指定する execScript = "Module1.test1" param1 = "AAA" param2 = "BBB" param3 = "CCC" Application.Run execScript, param1, param2, param3 End Sub Sub test1(ByVal param1, ByVal param2, ByVal param3) Debug.Print "test1を実行しました。" Debug.Print "1個目の引数の値は" & param1 Debug.Print "2個目の引数の値は" & param2 Debug.Print "3個目の引数の値は" & param3 End Sub |
実行結果 | |
1 2 3 4 | test1を実行しました。 1個目の引数の値はAAA 2個目の引数の値はBBB 3個目の引数の値はCCC |
引数が複数の場合(NGパターン。Excelの不具合?)
3個以上の引数を予め文字列に埋め込んでおくと、なぜか Application.Run で呼び出したプロシージャが2回実行されてしまいます。その為、この記述方法はなるべく使わない方が良いです。
Moduele1のソースコード | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | Option Explicit Sub main() Dim execScript As String Dim p1 As String Dim p2 As String Dim p3 As String p1 = "AAA" p2 = "BBB" p3 = "CCC" '呼び出すプロシージャは必ずモジュール名も一緒に指定する execScript = "Module1.test1(""" & p1 & """, """ & p2 & """, """ & p3 & """)" Application.Run execScript, p1, p2, p3 End Sub Sub test1(ByVal param1, ByVal param2, ByVal param3) Debug.Print "test1を実行しました。" Debug.Print "1個目の引数の値は" & param1 Debug.Print "2個目の引数の値は" & param2 Debug.Print "3個目の引数の値は" & param3 End Sub |
上記の実行結果は次の通りです。
実行結果 | |
1 2 3 4 5 6 7 8 | test1を実行しました。 1個目の引数の値はAAA 2個目の引数の値はBBB 3個目の引数の値はCCC test1を実行しました。 1個目の引数の値はAAA 2個目の引数の値はBBB 3個目の引数の値はCCC |
スポンサーリンク
- エクセルVBA
- Debug.Print が出力するウインドウを表示する方法
- オブジェクトが空(Nothing)であるかを調べる方法
- R1C1 形式で範囲を指定する方法
- 変数やオブジェクトの型を確認する方法
- yyyymmdd 形式の文字列で現在日付を取得する方法
- 新しいブックを作成して保存する方法
- yyyymmdd 形式の文字列や数値を Date 型に変換する方法
- yyyymmdd 形式の文字列や数値が正しい日付かを判定する方法
- OKボタンだけのダイアログを使用する方法
- Yes/No ダイアログを使用する方法
- Yes/No/Cancel ダイアログを使用する方法
- ダイアログのメッセージを途中で改行する方法
- ソースコードが長い時に途中で改行する方法
- 文字列の一部を置換する方法
- 処理を一時停止する方法
- Select Case で条件分岐する方法
- 半角を全角に変換、全角を半角に変換する方法
- 大文字と小文字を変換する方法
- 「プログラミングによる Visual Basic プロジェクトへのアクセスは信頼性に欠けます」と表示される場合の対処法
- 呼び出すプロシージャを文字列で指定する方法
- ワークシート
- 全てのシートをコピーする方法
- シート数を確認する方法
- シートをコピーして名前を変更する方法
- 指定した名前のシートが存在するかを確認する方法
- シートを削除する方法
- 名前を指定してシートを追加する方法
- 全てのシートをループして処理する方法
- 配列
- 配列のサイズを動的に変更する方法
- For Each で配列の全ての要素を処理する方法
- 2個の配列をマージする方法
- ファイル・フォルダ
- テキストファイルに書き込む方法(Shift-JIS)
- UTF-8など文字コードを指定してテキストファイルに書き込む方法
- ファイルの更新日時を取得する方法
- フォルダ内のファイル数を取得する方法
- フォルダ内のファイルとフォルダの一覧を取得する方法
- ファイルをコピーする方法
- パスからファイル名を取得する方法
- 拡張子無しのファイル名を取得する方法
- ファイルの拡張子を取得する方法
- ファイルの作成日時、更新日時を取得する方法
- VBAを実行中のファイルが格納されたフォルダのパスを取得する方法
- ファイルが存在するかを確認する方法
- Dictionary
- Dictionary の要素数をカウントする方法
- Dictionary の要素を全て削除する方法
- Dictionary の要素を削除する方法
- Dictionary をループして処理する方法
- Dictionary の要素の値を変更する方法
- Dictionary に指定したキーが存在するかを確認する方法
- Dictionary に要素を追加する方法
- Dictionary でキーの大文字と小文字を区別しないようにする方法
- SQL Server接続
- ExcelでADODBの参照設定を行う方法
- DELETE文を実行して削除件数を取得する方法
- SELECT文を実行して抽出結果をシートに出力する方法
- UPDATE文を実行して更新件数を取得する方法
- INSERT文を実行して登録件数を取得する方法
- ストアドプロシージャに引数を渡して実行する方法
- ストアドプロシージャを実行して戻り値を受け取る方法
- プリペアドステートメントで SQLを実行する方法