Excel VBAからワードを起動して文字を入力操作(Excel VBA)

【本日のミッション】

Excel VBAからワードを起動して文字を入力操作せよ。

ミッションの概要

Excel VBAからワードを起動して文字を入力操作せよ、というのが今回のミッションです。

Excel VBAからワードを起動して文字を入力操作(Excel VBA)

Wordアプリケーションは、セルやシートと違って、Excel上には存在しない外部オブジェクトです。

Excelでは、「Word.Application」というオブジェクトを使って、Wordを操作する(作成、削除、移動、入力、コピー等)ことができます。

Word.Application」を使用するには、下記の何れかの方法で準備をする必要があります。

  • 参照設定を利用する方法
  • CreateObject 関数を利用する方法
■■■スポンサーリンク■■■

参照設定を利用する方法

VBE画面の参照設定を利用する方法です。

【利用方法】

  1. VBE画面[ツール] ー [参照設定] をクリックします。

    Excel VBAからワードを起動して文字を入力操作(Excel VBA)

    「Microsoft Word XX.X Object Library」にチェックを入れて<OK>ボタンをクリックします。

    Excel VBAからワードを起動して文字を入力操作(Excel VBA)
    参照設定が完了したら、下記コードの実行が可能になります。
    Sub ExcelからWord起動入力操作_参照設定必要()
    
        '【変数】
        Dim wdApp As Word.Application    
    
        '■画面更新の停止
        Application.ScreenUpdating = False
    
        '■Wordの準備
        Set wdApp = New Word.Application
        
        '■Wordの可視化
        wdApp.Visible = True
        
        '■新規文書の作成
        wdApp.Documents.Add
        
        '■文字の入力
        wdApp.Selection.TypeText Text:="ExcelからWordへようこそ♪"
    
        '■変数の解放
        Set wdApp = Nothing
    
        '■画面更新の再開
        Application.ScreenUpdating = True
    End Sub
  2. 変数「wdApp」をWord.Applicationとして宣言します。
    Dim wdApp As Word.Application

    変数の宣言で「Dim wdApp As Object」としてしまうとVBAのエラーはでませんが、インテリセンス機能(自動メンバー表示)が利用できませんのでご注意ください。

  3. Newキーワードを使って、変数「wdApp」にWord.Applicationをセットします。
    Set wdApp = New Word.Application

    この記述をすることで、変数「wdApp」をWord.Applicationとして使うことができます。

  4. Word.Applicationを可視化します。
    この記述で、画面上にWordアプリケーションが表示されます。
    wdApp.Visible = True
  5. 新規文書を作成します。タイトルバーが「Word」から「文書1 – Word」に変わります。
    wdApp.Documents.Add

    Excel VBAからワードを起動して文字を入力操作(Excel VBA)


    ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
    Excel VBAからワードを起動して文字を入力操作(Excel VBA)
  6. Wordに文字を入力します。
    wdApp.Selection.TypeText Text:="ExcelからWordへようこそ♪"

    Excel VBAからワードを起動して文字を入力操作(Excel VBA)

  7. 処理の最後に、変数「wdApp」を解放します。
    Set wdApp = Nothing

【メリット】

  • VBE上でWord.Applicationに関するインテリセンス機能(自動メンバー表示)を使うことができます。
    メンバーが表示されるので、入力ミスが減ります。
    Excel VBAからワードを起動して文字を入力操作(Excel VBA)

【デメリット】

  • 参照設定をしていないと、変数「wdApp」の宣言の処理でエラーが出てしまいます。
    コンパイルエラー:ユーザ定義型は定義されていません。
    Excel VBAからワードを起動して文字を入力操作(Excel VBA)
■■■スポンサーリンク■■■

CreateObject 関数を利用する方法

関数を利用して、Word.Applicationを使えるようにする方法です。参照設定をしていなくても利用できます。

【利用方法】

Sub ExcelからWord起動入力操作_参照設定不要()
    '【変数】
    Dim wdApp As Object

    '■画面更新の停止
    Application.ScreenUpdating = False

    '■Wordの準備
    Set wdApp = CreateObject("Word.Application")
    
    '■Wordの可視化
    wdApp.Visible = True
    
    '■新規文書の作成
    wdApp.Documents.Add
    
    '■文字の入力
    wdApp.Selection.TypeText Text:="ExcelからWordへようこそ♪"

    '■変数の解放
    Set wdApp = Nothing

    '■画面更新の再開
    Application.ScreenUpdating = True
End Sub
  1. まず、変数「wdApp」をObjectとして宣言します。
    参照設定をしていないので、「Word.Application」への宣言はできません。
    Dim wdApp As Object
  2. 次に、CreateObject関数を利用して、変数「wdApp」にWord.Applicationをセットします。
    Set wdApp = CreateObject("Word.Application")
    

    この記述をすることで、変数「wdApp」をWord.Applicationとして使うことができます。

  3. Word.Applicationを可視化します。
    この記述で、画面上にWordアプリケーションが表示されます。
    wdApp.Visible = True
  4. 新規文書を作成します。タイトルバーが「Word」から「文書1 – Word」に変わります。
    wdApp.Documents.Add

    Excel VBAからワードを起動して文字を入力操作(Excel VBA)


    ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
    Excel VBAからワードを起動して文字を入力操作(Excel VBA)
  5. Wordに文字を入力します。
    wdApp.Selection.TypeText Text:="ExcelからWordへようこそ♪"

    Excel VBAからワードを起動して文字を入力操作(Excel VBA)

  6. 処理の最後に、変数「wdApp」を解放します。
    Set wdApp = Nothing

【メリット】

  • 参照設定不要!関数の利用だけで、簡単なコードの記述で利用することができます。

【デメリット】

  • VBE上でWord.Applicationに関するインテリセンス機能(自動メンバー表示)が効かなくなります。
    Word.ApplicationはExcel上のオブジェクトではないので、参照設定をしないとインテリセンス機能が働きません。

    ↓これがインテリセンス機能(自動メンバー表示)です。Excel VBAからワードを起動して文字を入力操作(Excel VBA)

    インテリセンス機能(自動メンバー表示)が働かないと、入力ミスの可能性が生じます。
    この機能が必要な方は、参照設定をご利用ください。

最後のNothingの必要性

どちらのコードも処理の最後に

Set wdApp = Nothing

と、変数「wdApp」を解放するコードが必要です。

Word.Applicationのインスタンスが、メモリ上にずっと残ってしまうことがあるからです。

それがどういう状況なのかはわからないのですが、私も長時間マクロ処理をしていると処理が遅くなっていく現象に見舞われることがあります。

そんな時は、Excelと一旦閉じて再度立ち上げると、その現象は解消されます。

そんなこともあり、オブジェクト変数は最後に「Nothing」として、メモリ上から消すように心がけています。

Selection.TypeText メソッド

指定したテキストを、Wordのカーソル位置に挿入します。

wdApp.Selection.TypeText Text:= Wordのカーソル位置に挿入したい文字列

今回は、Wordを立ち上げたばかりで1行目にカーソルがあるため、1行目に指定した文字列が挿入されます。

wdApp.Selection.TypeText Text:="ExcelからWordへようこそ♪"

Excel VBAからワードを起動して文字を入力操作(Excel VBA)

参照

系列が1つのグラフを自動大量連続作成(Excel VBA)
「実行時エラー 1004」を出さずに、ワークシート内のグラフを「グラフ 元」以外全て削除(Excel VBA)
グラフの参照先を変えると勝手にグラフの色が変わる現象を解決せよ
系列が複数あるグラフを自動大量連続作成(Excel VBA)
n行毎の改ページ設定 「実行時エラー1004 RangeクラスのPageBreakプロパティを設定できません」の原因(Excel VBA)
参照データ数が異なる・参照先が変動する月別グラフを自動大量連続作成(Excel VBA)
複数系列・参照データ数が異なる・参照先が変動する月別グラフを自動大量連続作成(Excel VBA)
大量の画像やグラフ等のオブジェクトで画面表示が遅いのを解決(Excel)
エクセル シートに画像が存在するかどうか(有無)を調べる方法(Excel VBA)
エクセルシート上 全てのオブジェクト(画像・図形・グラフ等)を選択し、削除する(Excel VBA)
エクセルシート上のオブジェクト(図形・画像・グラフ等)の件数を数える方法(Excel VBA)
エクセル シートにグラフが存在するかどうか(有無)を調べる方法(Excel VBA)
エクセル シートに図形が存在するかどうか(有無)を調べる方法(Excel VBA)
エクセル 選択しているセル範囲に写真が存在しているか(有無)を確認(Excel VBA)
エクセル 選択しているセル範囲にグラフが存在しているか(有無)を確認(Excel VBA)
エクセル 選択しているセル範囲に図形が存在しているか(有無)を確認(Excel VBA)
エクセル 選択セル範囲の写真を削除する(Excel VBA)
エクセル 選択セル範囲のグラフを削除する(Excel VBA)
エクセル 選択セル範囲の図形を削除する(Excel VBA)
Excel VBAでワードを起動して文字を入力操作(Excel VBA)
Excel VBAでワードを起動してエクセルの表をワードに貼付け(Excel VBA)
Excel VBAでワードを起動して エクセルのエクセルの表を図としてワードに貼付け(Excel VBA)
Word コピー貼付けした図が白い枠だけ?図が表示されない現象を解決
Excel VBAでワードを起動して グラフをワードに図として貼付け(Excel VBA)

■■■スポンサーリンク■■■