【ExcelVBA】ExcelのマクロからWordのマクロを実行するには

この記事では、ExcelのマクロからWordのマクロを実行する方法についてご説明します。

【動画】ExcelのマクロからWordのマクロを実行する実際の動き

本題に入る前に、まずは次のツイートをご覧ください。

ツイートの動画では、Excelのマクロ(ファイル「A.xlsm」のマクロ)から、Wordのマクロ(ファイル「B.docs」のマクロ)を実行しています。

ExcelのマクロからWordのマクロを実行する方法

ExcelのマクロからWordのマクロを実行するには、次の流れの通りにコードを書いていきます。

STEP.1
Wordのファイル名の取得
実行したいマクロのあるWordのファイル名を取得します。なお、Wordのファイル名はフルパスで取得します。
STEP.2
Wordファイルのマクロ名の取得
実行したいWordファイルのマクロ名を取得します。
STEP.3
Wordのマクロを実行する
Wordのマクロを実行します。実行するには、Runメソッドを使って実行します。
Runメソッドには、引数に「Step1で取得したWordのファイル名」と「Wordのマクロに渡したい引数(※省略可)」を指定して実行します。
Runメソッドとは?
Runメソッドは、外部プログラムを実行するメソッドです。

コードの例

呼び出し側のExcel(A.xlsm)のマクロのコード(例)

    Dim wdMacro As String
    Dim wdApp As Word.Application
    Dim wdDoc As Word.Document    
    Dim rng As Range
    Dim getVal As Variant
    
    'Wordのファイル
    Const wdFile As String = "C:\work\B.docm"

    'Wordのマクロ名を取得する
    wdMacro = "func_main"
    
    'セルのデータをRangeオブジェクトに取得する
    Set rng = Range("A9:G18")

    'Rangeオブジェクトの中身を配列に格納する
    getVal = rng
    
    'Documentオブジェクトからインスタンスを生成する
    Set wdDoc = GetObject(wdFile, "Word.Document")
    
    'Applicationオブジェクトからインスタンスを生成する
    Set wdApp = GetObject(, "word.Application")
    
    'wordファイルをアクティブにする
    wdDoc.Activate
    
    'Wordのマクロを呼び出す
    wdApp.Run wdMacro, getVal
        
    'wordファイル終了処理
    wdApp.ActiveDocument.Close SaveChanges:=False
    wdApp.Quit
    Set wdApp = Nothing
    Set wdDoc = Nothing
このマクロは何をしている?
このマクロは何をしているのかというと、ファイル「A.xlsm」のセルの値(A9からG18のセルの値)を、ファイル「B.docs」に渡そうとしています。

コードの解説

まずは29行目を見てください。

29行目のRunメソッドで、Wordファイルのマクロ(ファイル「B.docs」のマクロ)を呼び出しています。

Runメソッドには、第1引数にWordのマクロ名を、第2引数にマクロに渡したい引数(※省略可)を指定します。

ちなみに、Wordファイル名は8行目で、実行したいWordファイルのマクロ名は11行目で取得しています。

Wordのマクロのコードも見てみましょう

Wordのマクロのコードについてもご説明します。

Word(B.docm)のマクロのコード(例)

Sub func_main(ByRef getVal() As Variant)

    Dim i As Integer, j As Integer
    
    '表の処理
    With ActiveDocument.Bookmarks("\Page").Range.Tables
        If .Count = 0 Then Exit Sub
        
        '表にデータを書き込む
        For i = 1 To UBound(getVal, 1)
            For j = 1 To UBound(getVal, 2)
                .Item(1).Cell((i), (j)).Select
                Selection.TypeText Text:=getVal(i, j)                
            Next
        Next
        
    End With
    
    'ファイルを保存する
    ActiveDocument.Save
    
End Sub
このマクロは何をしている?
このマクロは何をしているのかというと、ファイル「A.xlsm」から受け取ったデータをWordの表に貼り付けようとしています。

コードの解説

まずは1行目を見てください。

マクロfunc_mainの引数getValに、ファイル「A.xlsm」から受け取ったデータが格納されています。

引数getValにはファイル「A.xlsm」のセルの値が格納されているので、10行目から15行目のループ処理の中でこの引数getValの値を取り出してWordの表に貼り付けています。(13行目)

最後に

本記事では、ExcelのマクロからWordのマクロを実行する方法についてご説明しました。

Wordのマクロを呼び出すには、Runメソッドの引数に「Wordのファイル名」と「Wordのマクロに渡したい引数(※省略可)」を指定して実行します。

コードの書き方は少し癖がありますが、先ほどお話したExcelのマクロのコードを参考にしていただければと思います。

コードの書き方は特に難しくはないので、是非参考にしてみてくださいね。

プログラミングのスキルを習得するなら

プログラミングのスキルを習得したい、今のスキルをもっと高めたい、そう考えているなら「プログラミングスクール」がおすすめです。

プログラミングのスキルの基礎を身につけるなら「TechAcademy」で1週間の無料体験があるので、これで「プログラミングの基礎」を学ぶのにおすすめですよ。

→ TechAcademyの「1週間 無料体験」はこちら