分かりやすく、使いやすく。

呼び出すプロシージャを文字列で指定する方法

スポンサーリンク

Excel VBA では、 Application.Run を使用することで、呼び出すプロシージャを文字列で指定することができます。 Application.Run でプロシージャを呼び出す場合は、モジュール名の指定が必須になります。

  1. 引数無しの関数を呼び出す場合
  2. 引数が1個の場合
  3. 引数が複数の場合
  4. 引数が複数の場合(NGパターン。Excelの不具合?)


引数無しの関数を呼び出す場合

次のサンプルコードでは、 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 
スポンサーリンク
スポンサーリンク