#479 文字列化されたプロシージャ名を実行させるには? VBA

ある条件によって呼び出すプロシージャを切り分けたい場合、通常は次のようなスタイルでコードを記述すると思います。

Public Sub SampleExe(num As Integer)
  Select Case num
    Case 1
      Sample_A
    Case 2
      Sample_B
    Case 3
      Sample_C
  End Select
End Sub

Private Sub Sample_A()
  Debug.Print "A"
End Sub

Private Sub Sample_B()
  Debug.Print "B"
End Sub

Private Sub Sample_C()
  Debug.Print "C"
End Sub


上記のプログラムでは、SampleExeプロシージャの引数に与える”数値”によって呼び出すプロシージャを切り替えています。たとえば引数が「1」なら「Sample_A」といった具合です。


一方、このようなケースで「Eval関数」を使うと、”プロシージャ名という文字列”を引数として、そのプロシージャを呼び出すことができます。

そのサンプルが次のコードです。「SampleExeStr」というプロシージャに、そこから実行させたいプロシージャ名を引数strProcNameとして与えます。たとえば「SampleExeStr "Sample_A()"」のように呼び出します。

Public Sub SampleExeStr(strProcName As String)
  
  Eval strProcName

End Sub

Public Function Sample_A()
  Debug.Print "A"
End Function

Public Function Sample_B()
  Debug.Print "B"
End Function

Public Function Sample_C()
  Debug.Print "C"
End Function


ここでは、次のような点に注意します。
  • 引数strProcNameには、通常にプロシージャを呼び出すときと同様、「Sample_A()」のように「()」の部分も付けて指定します。

  • そこから呼び出される別のプロシージャは、たとえ返り値を持たない場合であってもFunctionプロシージャとします。Eval関数は、あくまでもその引数に指定された値(ここではFunctionプロシージャの返り値)を評価しようと動作しますので、返り値を持たないSubプロシージャではエラーとなります。

  • そこから呼び出される別のプロシージャは、Privateな呼び出しだけであっても、”Public”で宣言します。


実行例:
実行例
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved