Office アプリケーションを別のアプリケーションから制御する
オブジェクトを処理する Office アプリケーションのコードを別のアプリケーションで実行する場合は、次の手順を実行します。
コードを実行するには
[ツール] の [参照設定] ダイアログ ボックスで他のアプリケーションのタイプ ライブラリへの参照を設定します。 次に、[オブジェクト ブラウザー] ウィンドウにオブジェクト、プロパティ、メソッドが表示され、コンパイル時に構文がチェックされます。 それらに関する状況依存のヘルプを取得することもできます。
他のアプリケーションのオブジェクトを特定の型として参照するオブジェクト変数を宣言します。 オブジェクトを提供するアプリケーションの名前を使って、正確に型を宣言します。 たとえば、次のステートメントでは、Microsoft Word 文書をポイントする変数と、Microsoft Excel ブックを参照する別の変数を宣言しています。
Dim appWD As Word.Application, wbXL As Excel.Workbook
メモ コードを早期バインドする場合は、前の手順に従う必要があります。
次の使用例に示すように、他のアプリケーションで処理するオブジェクトの OLE プログラム ID で CreateObject 関数を使用します。 他のアプリケーションのセッションを見る場合は、Visible プロパティに True を設定します。
Dim appWD As Word.Application Set appWD = CreateObject("Word.Application") appWd.Visible = True
変数に含まれるオブジェクトにプロパティとメソッドを使用します。 たとえば、次の使用例は新しい Word 文書を作成します。
Dim appWD As Word.Application Set appWD = CreateObject("Word.Application") appWD.Documents.Add
他のアプリケーションでの操作が終了したら、次の例のように、Quit メソッドでアプリケーションを終了し、そのオブジェクト変数を Nothing に設定して、使用しているメモリを解放します。
appWd.Quit Set appWd = Nothing
提供されるサンプル コード:Bill Jelen、MrExcel.com 次のコード例では、スプレッドシート内のデータ行ごとに新しい Microsoft Office Word ファイルを作成します。
' You must pick Microsoft Word Object Library from Tools>References
' in the VB editor to execute Word commands.
Sub ControlWord()
Dim appWD As Word.Application
' Create a new instance of Word and make it visible
Set appWD = CreateObject("Word.Application.12")
appWD.Visible = True
' Find the last row with data in the spreadsheet
FinalRow = Range("A9999").End(xlUp).Row
For i = 1 To FinalRow
' Copy the current row
Worksheets("Sheet1").Rows(i).Copy
' Tell Word to create a new document
appWD.Documents.Add
' Tell Word to paste the contents of the clipboard into the new document.
appWD.Selection.Paste
' Save the new document with a sequential file name.
appWD.ActiveDocument.SaveAs Filename:="File" & i
' Close the new Word document.
appWD.ActiveDocument.Close
Next i
' Close the Word application.
appWD.Quit
End Sub
提供されるサンプル コード:Dennis Wallentin、VSTO & .NET & Excel この例では、3 つの値を含む名前付き範囲W_Dataのセル値を取得し、それらの値をWord ドキュメントに挿入します。 値は、ブックマークされた場所 td1、td2、および td3 に挿入されます。 この例を実行するには、ブックの Sheet1 に、3 つの値がある名前付き範囲 W_Data が含まれている必要があります。 Word 文書 Test.docx が Excel ブックと同じ場所に保存され、Word 文書には 3 つのブックマーク td1、td2、td3 が作成されている必要があります。
' You must pick Microsoft Word Object Library from Tools>References
' in the Visual Basic editor to execute Word commands.
Option Explicit
Sub Add_Single_Values_Word()
Dim wdApp As Word.Application
Dim wdDoc As Word.Document
Dim wdRange1 As Word.Range
Dim wdRange2 As Word.Range
Dim wdRange3 As Word.Range
Dim wbBook As Workbook
Dim wsSheet As Worksheet
Dim vaData As Variant
Set wbBook = ThisWorkbook
Set wsSheet = wbBook.Worksheets("Sheet1")
vaData = wsSheet.Range("W_Data").Value
' Instantiate the Word Objects.
Set wdApp = New Word.Application
Set wdDoc = wdApp.Documents.Open(wbBook.Path & "\Test.docx")
With wdDoc
Set wdRange1 = .Bookmarks("td1").Range
Set wdRange2 = .Bookmarks("td2").Range
Set wdRange3 = .Bookmarks("td3").Range
End With
' Write values to the bookmarks.
wdRange1.Text = vaData(1, 1)
wdRange2.Text = vaData(2, 1)
wdRange3.Text = vaData(3, 1)
With wdDoc
.Save
.Close
End With
wdApp.Quit
' Release the objects from memory.
Set wdRange1 = Nothing
Set wdRange2 = Nothing
Set wdRange3 = Nothing
Set wdDoc = Nothing
Set wdApp = Nothing
End Sub
投稿者について
MVP Bill Jelen は Microsoft Excel に関する書籍を 25 冊以上執筆しています。 Bill は Leo Laporte と共に TechTV の常連ゲストであり、MrExcel.com のホストでもあります。MrExcel.com には Excel に関する 300,000 件以上の質問と回答が掲載されています。
Dennis Wallentin は、Excel および Excel Services の .NET Framework ソリューションを重点的に扱うブログである VSTO & .NET & Excel の作者です。 Dennis は 20 年以上 Excel ソリューションを開発しており、また『Professional Excel Development: The Definitive Guide to Developing Applications Using Microsoft Excel, VBA, and .NET (2nd Edition)』の共著者でもあります。
サポートとフィードバック
Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示