0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

VBA学習備忘録_14_プロシージャの呼び出しに関して

0
Posted at

Callに関する諸注意

(1)同一モジュール内のプロシージャだけでなく、以下のように違うモジュールのプロシージャも呼べるらしい。(※次の(2)のパターンに注意)

VSCode等と同様にモジュールを並べて表示して見比べながら編集できないか調べていたら以下のところにそれ用のタブがありました。

image.png

左右に並べて表示を押した様子

image.png

Module1

Sub Sample1()
    Call TestProc  '「テスト」のメッセージボックスが呼び出される
End Sub

Module2

Sub TestProc()
    MsgBox "テスト"
End Sub

(2)違うモジュールにある同名のモジュールをCallで呼び出したいときは以下のようにプロシージャ名の前に「モジュール名.」を付けて呼び出す

「モジュール名.」がない場合、Callを使っている側の方がCallによって優先的に呼び出される
⇒下記のModule1において「Module2.」を消した場合、「サンプル」のダイアログボックスが表示される

Module1

Sub Sample1()
    Call Module2.TestProc  'Module2があることで呼び出されるのは「テスト」のメッセージボックス
End Sub                    'Module2がない場合、呼び出されるのは「サンプル」のメッセージボックス

Sub TestProc()
    MsgBox "サンプル"
End Sub

Module2

Sub TestProc()
    MsgBox "テスト"
End Sub

異なるブックにあるモジュール内のプロシージャの呼び出し

Callは使わず以下の手順をたどり、最終的にRunメソッドを使って呼び出す

(1)Openメソッドで対象のモジュールをもつブックを開ける
(2)以下の書式に従って呼び出す。

Application.Run "ブック名.xlsm!プロシージャ名"

結果として、以下のようなかんじになる

Sub sample()
    Workbooks.Open "C:\test\sample2.xlsm"
    Application.Run "sample2.xlsm!hogehoge"  
End Sub 'あらかじめ、hogehogeプロシージャはsample2.xlsmに記載し、上のパスの場所に格納

主な参考資料

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?