外部オブジェクトは、そのままでは、Word VBAの中には存在しません。その為、利用する前に、外部オブジェクトを追加する操作が必要です。
CreateObject関数を使用します。
Excelシートを指定するには、GetObject関数を使用します。
Ecxelオブジェトのオブジェクト変数を宣言し、Excelオブジェクトを追加します。
WordVBAを使用して、ExcelBookを開く
では、早速、WordVBAを使用して、ExcelBookを開いてみましょう。
「Microsoft Excel 15.0 Object Library」を追加した場合
Sub OpenExcel()
'Excelファイルを開くマクロ
‘*** 参考 http://www.atmarkit.co.jp/ait/articles/1512/17/news020.html ***
Dim ExBk As Excel.Workbook 'Excel. Workbookを格納するための変数
Dim BkPath As String '「置換リスト」(開くExcelファイル)の存在するパスを格納する変数
'「置換リスト.xlsx」が存在するパス変数に格納
BkPath = "H:\Data\development\CAD\Fusion360\Fusion360入門書\リライト原稿\置換マクロ"
Set ExBk = GetObject(BkPath & "\" & "置換リスト.xlsx")
ExBk.Application.Visible = True
'マクロが終了するとExcelファイルは閉じられます。
Set ExBk = Nothing 'ExBkを解放する
End Sub
「Microsoft Excel 15.0 Object Library」を追加ていない場合(インテリセンスの動作が期待できない。)
Sub OpenExcelUseObject()
'Excelファイルを開くマクロ
Dim ExBk As Object 'Excel.Workbookを格納するための変数
Dim BkPath As String '「置換リスト」(開くExcelファイル)の存在するパスを格納する変数
'「置換リスト.xlsx」が存在するパス変数に格納
BkPath = "H:\Data\development\CAD\Fusion360\Fusion360入門書\リライト原稿\置換マクロ"
Set ExBk = GetObject(BkPath & "\" & "置換リスト.xlsx")
ExBk.Application.Visible = True
'マクロが終了するとExcelファイルは閉じられます。
Set ExBk = Nothing 'ExBkを解放する
End Sub
WordVBAを使用して、ExcelBook上の特定のセル内のデータを取得する
WordVBAから、Excelブック内の特定のセル内のデータを取得し、メッセージボックスに表示します。
CellsプロパティもRangeプロパティも利用できることが確認できました。
セル"A3"には、「データー」という文字列が格納されていたことが確認できました。
Sub GetExcelData()
'Excelファイルから、セルの中のデータを取得するマクロ
Dim ExBk As Excel.Workbook 'Excel.Workbookを格納するための変数
Dim BkPath As String '「置換リスト」(開くExcelファイル)の存在するパスを格納する変数
Dim myStr As String '文字列を格納する変数
'「置換リスト.xlsx」が存在するパス変数に格納
BkPath = "H:\Data\development\CAD\Fusion360\Fusion360入門書\リライト原稿\置換マクロ"
Set ExBk = GetObject(BkPath & "\" & "置換リスト.xlsx")
'Excelから、セルのデータを取得する
myStr = ExBk.Worksheets(1).Cells(3, 1).Value 'Cellsプロパティでセルを指定
'myStr = ExBk.Worksheets(1).Range("A3").Value 'Rangeプロパティでセルを指定
'取得した文字列をメッセージボックスで表示する。
MsgBox (myStr)
Set ExBk = Nothing 'ExBkを解放する
End Sub
WordVBAを使用して、Excelブック上の特定の行の最終行を取得する(利用できない。)
最終行の特定は、Excelマクロを使用する際、頻繁に使用する操作です。
残念ながら、Endプロパティは、使用できないようです。
Sub GetExcelLastCell()
'Excelファイルから、セルの中のデータを取得するマクロ(Endプロパティが利用できないので実行できない)
Dim ExBk As Excel.Workbook 'Excel.Workbookを格納するための変数
Dim BkPath As Integer '「置換リスト」(開くExcelファイル)の存在するパスを格納する変数
Dim LastRow As Long '文字列を格納する変数
'「置換リスト.xlsx」が存在するパス変数に格納
BkPath = "H:\Data\development\CAD\Fusion360\Fusion360入門書\リライト原稿\置換マクロ"
Set ExBk = GetObject(BkPath & "\" & "置換リスト.xlsx")
'Excelから、セルのデータを取得する
LastRow = ExBk.Worksheets(1).Cells(Rows.Count, 1).End(xlUp).row '最終セルの行数
'取得した値をメッセージボックスで表示する。
MsgBox (LastRow)
Set ExBk = Nothing 'ExBkを解放する
End Sub
参考:入力されているデータの最終セルを取得する