エクセルVBAでよく使うコードの備忘録。VBAで別のエクセルワークブックのマクロを実行するコード。
別ブックのマクロを実行する
別ブックのマクロを実行するには、ApplicationオブジェクトのRunメソッドを使用します。Runメソッドの引数として、ブックのパスと実行したいマクロ名をつなげて以下のような書式で渡します。
別ブックのマクロを実行
Call Application.Run("'[ワークブックのパス]'![マクロ名]")
実行したいマクロが含まれるワークブックがすでに開いているのであれば、そのまま実行されます。もし開いていなければ、新たにワークブックが開いたうえでマクロが実行されます。ちなみに、すでにワークブックが開かれている場合は、パスではなくファイル名を引数として渡すだけでマクロが実行できます(ファイル名なしでも可能ですが、お勧めできません)。
別ブックのマクロを実行(すでにブックが開いている場合)
Call Application.Run("[ワークブック名]![マクロ名]")
サンプルコード
実際に別ブックのマクロを使用するコードを書く際は、別ブックのマクロを実行した後はそのブックは閉じることになると思います(不要なので)。下記のサンプルコードでは、まずマクロを実行したいエクセルブックを開き(ワークブックオブジェクトを取得)、その上でRunメソッドを使用してマクロを実行しています。こうすることにより、実行後は使用済みのワークブックを簡単に閉じられるようにしてあります。
なお、コードを使用する際はカッコに囲まれた部分([***])を自分のプログラムに合わせて変更してください。
別ブックのマクロを実行
'--- 別ブックのマクロを実行する ---'
Public Sub ExternalMacroTest()
'--- 実行したいマクロが含まれるブックのパス ---'
Dim bkPath As String
bkPath = "[別ブックのパス]"
'--- ワークブックを開く ---'
Dim wb As Workbook
Set wb = Workbooks.Open(bkPath)
'--- 実行したいマクロ名 ---'
Dim macroName As String
macroName = "[マクロ名]"
'--- マクロを実行する ---'
Call Application.Run("'" & bkPath & "'!" & macroName)
'--- 使用済みのワークブックを閉じる ---'
wb.Close
End Sub
ちなみに、マクロのコードにパスワードがかかっていて中が見られない場合でも、実行したいマクロ名がわかれば実行は可能です。