Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


5712 / 13645 ツリー ←次へ | 前へ→

【49282】オブジェクト名を変数として格納する場合について 多摩川 07/5/30(水) 16:19 質問[未読]
【49289】Re:オブジェクト名を変数として格納する場... Jaka 07/5/30(水) 16:57 発言[未読]
【49313】Re:オブジェクト名を変数として格納する場... 多摩川 07/5/31(木) 8:21 お礼[未読]
【49290】Re:オブジェクト名を変数として格納する場... ウッシ 07/5/30(水) 16:58 発言[未読]
【49312】Re:オブジェクト名を変数として格納する場... 多摩川 07/5/31(木) 8:14 お礼[未読]

【49282】オブジェクト名を変数として格納する場合...
質問  多摩川  - 07/5/30(水) 16:19 -

引用なし
パスワード
   こんにちは。多摩川と申します。

シートモジュールを起点に標準モジュールのプロシージャを呼び出すマクロを作成中です。
シートには
   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) """

これも,だめなようでした。
どのようにして,呼び出しをすればよいのでしょうか?
恐れ入りますが,どなたかご教示下さい。

【49289】Re:オブジェクト名を変数として格納する...
発言  Jaka  - 07/5/30(水) 16:57 -

引用なし
パスワード
   全部読んでないけど、Callを大雑把に書くと

Sub main()
Dim a1 As Object, a2 As Object
Dim b1 As Object, b2 As Object

Set a1 = Sheets("Sheet1")
Set a2 = Sheets("Sheet2")
Call AAA(a1, a2)

Set b1 = Sheets("Sheet3")
Set b2 = Sheets("Sheet1")
Call BBB(b1, b2)
End Sub

Sub AAA(AA1 As Object, AA2 As Object)
AA1.Select
MsgBox 1
AA2.Select
MsgBox 2
End Sub

Sub BBB(BB1 As Object, BB2 As Object)
BB1.Select
MsgBox 3
BB2.Select
MsgBox 1
End Sub

【49290】Re:オブジェクト名を変数として格納する...
発言  ウッシ  - 07/5/30(水) 16:58 -

引用なし
パスワード
   こんにちは

  Dim s As String
  s = "f_" & OutType & "." & OutType
  Application.Run s, MyFName, IDcheck

他の変数はセットされているとして。

【49312】Re:オブジェクト名を変数として格納する...
お礼  多摩川  - 07/5/31(木) 8:14 -

引用なし
パスワード
   ▼ウッシ さん:
おはようございます。

>  Dim s As String
>  s = "f_" & OutType & "." & OutType
>  Application.Run s, MyFName, IDcheck

Runメソッドの定義が間違っていたわけですね!
Application.Run "f_" & OutType & "." & OutType, MyFName, IDcheck
としても,動くことを確認しました。
やはり,処理速度に影響するため,セットする方がいいんでしょうね。
ありがとうございました。

【49313】Re:オブジェクト名を変数として格納する...
お礼  多摩川  - 07/5/31(木) 8:21 -

引用なし
パスワード
   ▼Jaka さん:
おはようございます。

>Sub main()
>Dim a1 As Object, a2 As Object
>Dim b1 As Object, b2 As Object
>
>Set a1 = Sheets("Sheet1")
>Set a2 = Sheets("Sheet2")
>Call AAA(a1, a2)
>
>Set b1 = Sheets("Sheet3")
>Set b2 = Sheets("Sheet1")
>Call BBB(b1, b2)
>End Sub
>
>Sub AAA(AA1 As Object, AA2 As Object)
>AA1.Select
>MsgBox 1
>AA2.Select
>MsgBox 2
>End Sub
>
>Sub BBB(BB1 As Object, BB2 As Object)
>BB1.Select
>MsgBox 3
>BB2.Select
>MsgBox 1
>End Sub

#49284 への回答って事でよろしいんですよね?
ありがとうございました。

5712 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free