|
こんにちは。多摩川と申します。
シートモジュールを起点に標準モジュールのプロシージャを呼び出すマクロを作成中です。
シートには
B列 C列 D列 E列
5行 hexa 実行 Yes Yes
6行 penta 実行 Yes
7行 tetra 実行 Yes
:
:
X行 END
標準モジュールには下記のようなオブジェクトがあります。
・オブジェクト名:c_hexa
・オブジェクト名:f_hexa
・オブジェクト名:c_penta
・オブジェクト名:f_penta
・オブジェクト名:c_tetra
・オブジェクト名:f_tetra
さらに,オブジェクトには下記のようなSub プロシージャが存在します。
・Sub hexa(a, b) 'c_hexa or f_hexa の場合
・Sub penta(a, b) 'c_penta or f_penta の場合
・Sub tetra(a, b) 'c_tetra or f_tetra の場合
(プロシージャのコード内容はオブジェクトごとに異なります。)
まとめると,例えば,Callステートメントの場合
Call c_hexa.hexa(a, b)
Call f_hexa.hexa(a, b)
Call c_penta.penta(a, b)
こんな感じです。
'シートモジュール
Option Explicit
Dim MyFName As String
Dim OutType As String
Dim IDcheck As String
Dim YorN As Integer
Dim i As Integer
'---------------------------------------------------------
Sub Main()
i = 1
IDcheck = 0
YorN = 0
MyFName = .GetOpenFilename
If MyFName = "False" Then Exit Sub
With ThisWorkbook.Sheets(1)
While .Cells(i + 4, 2) <> "END"
If .Cells(i + 4, 3) = "実行" Then
OutType = .Cells(i + 4, 2)
If .Cells(i + 4, 4) = "Yes" Then IDcheck = 1
If .Cells(i + 4, 5) = "Yes" Then YorN = 1
i = i + 1
Select Case YorN
Case 0 '例,c_hexa.Length(a, b)
'各プロシージャを呼び出す。
Case 1 '例,f_hexa.Length(a, b)
'各プロシージャを呼び出す。1.
End Select
End If
Wend
End With
End Sub
i = 1 の場合,OutType = "hexa", IDcheck = 1, YorN = 1 となります。
"hexa"というキーワードが多数あるため,変数として格納しました。
そして,1.の所でプロシージャの呼び出しが起きるのですが,
Call "f_" & OutType & "." & OutType & "(MyFName, IDcheck)"
としたいのですが,これはだめなようです。では,と思い,
Application.Run """f_" & OutType & "." & OutType & "(MyFName, IDcheck) """
これも,だめなようでした。
どのようにして,呼び出しをすればよいのでしょうか?
恐れ入りますが,どなたかご教示下さい。
|
|