「powerpoint VBAでEXCELの値を取得」
といった検索キーワードで、このサイト『インストラクターのネタ帳』へアクセスがありました。
PowerPoint VBAで起動済みのExcelからデータを取得する
(短いコードで済む)起動済みのExcelからデータを取得する、PowerPoint VBAのSubプロシージャから確認しましょう。
Dim xl_app As Object
Set xl_app = GetObject(Class:="Excel.Application")
ActivePresentation.Slides(1).Shapes(1).TextFrame.TextRange.Text = _
xl_app.Worksheets(1).Range("A1").Value
Set xl_app = Nothing
End Sub実行すると、起動済みExcelの、1枚目のワークシートの、A1セルの値が、
xl_app.Worksheets(1).Range("A1").Value
アクティブなプレゼンテーションの、先頭スライドの、1つ目の図形に入力されます。
ActivePresentation.Slides(1).Shapes(1).TextFrame.TextRange.Text = _
実務で利用する場合には、エラー対策を入れる必要がありますが、そうすると当然コードは長くなりますから、まずは上記のような最低限の基本を理解しましょう。
GetObjectする場合の処理
行っている処理は以下のとおりです。
VBAのGetObject関数を使って、起動済みのExcelへの参照を取得します。
Dim xl_app As Object
Set xl_app = GetObject(Class:="Excel.Application")
つづく、
ActivePresentation.Slides(1).Shapes(1).TextFrame.TextRange.Text = _
の部分は、純粋なPowerPoint VBAのコードです。拙著『いちばんやさしいPowerPoint VBAの教本』の、Chapter 6までで解説しているコードです。
次の、
xl_app.Worksheets(1).Range("A1").Value
の部分は、実質的にExcel VBAのコードです。純粋なExcel VBAであれば、Excel.Applicationへの参照を省略して、いきなり
Worksheets(1).Range("A1").Value
と書けますが、実行環境としてはExcel VBAではないので、先にExcel.Applicationへの参照を取得したオブジェクト変数xl_appから、オブジェクトの階層を辿って、1枚目のワークシートのA1セルの値を取得しています。
PowerPoint VBAでExcelを起動してデータを取得する
Excelを起動するところからPowerPoint VBAで処理したい場合は、以下のようなSubプロシージャです。
Dim xl_app As Object
Set xl_app = CreateObject(Class:="Excel.Application")
xl_app.Visible = True
Dim xl_book As Object
Set xl_book = xl_app.Workbooks.Open("C:\temp\sample.xlsx")
ActivePresentation.Slides(1).Shapes(1).TextFrame.TextRange.Text = _
xl_book.Worksheets(1).Range("A1").Value
xl_book.Close
Set xl_book = Nothing
xl_app.Quit
Set xl_app = Nothing
Cドライブのtempフォルダーにsample.xlsxを用意しておいてから、拙著『いちばんやさしいExcel VBAの教本』でも繰り返し行っているように、ステップ実行してみてください。
途中でブックを開いていない状態でExcelが表示され、「C:\temp\sample.xlsx」が開かれてから、1枚目のワークシートのA1セルの値が、アクティブなプレゼンテーションの先頭スライドの1つ目の図形に入力されます。
CretateObjectする場合の処理
起動済みのExcelへの参照を取得する場合はGetObject関数でしたが、Excelを起動するところから処理させたいので、CreateObject関数を使っています。
Dim xl_app As Object
Set xl_app = CreateObject(Class:="Excel.Application")
CreateObject関数の戻り値を代入する
Set xl_app = CreateObject(Class:="Excel.Application")
が実行されればExcelは起動するのですが、非表示のままでは何が起きているのかわからないので、表示状態にします。
xl_app.Visible = True
つづいて「C:\temp\sample.xlsx」を開き、このブックを表すExcel.Workbookオブジェクトへの参照を変数xl_bookに代入します。
Dim xl_book As Object
Set xl_book = xl_app.Workbooks.Open("C:\temp\sample.xlsx")
次の、
ActivePresentation.Slides(1).Shapes(1).TextFrame.TextRange.Text = _
は、先ほどと同じく純粋なPowerPoint VBAのコードです。
つづく、
xl_book.Worksheets(1).Range("A1").Value
は、実質的にExcel VBAのコードです。今回は、Excel.Workbookオブジェクトへの参照が変数xl_bookに代入されていますから、Workbookオブジェクトから階層を辿っています。
Excelからデータを取得して、プレゼンテーションファイルの図形への入力が済んだら、ブックを閉じて、
xl_book.Close
Set xl_book = Nothing
Excelを終了しています。
xl_app.Quit
Set xl_app = Nothing
- Newer:Word VBAで1つ下のセルを取得・選択する
- Older:GroupItems・GroupShapesとは
Home » パワーポイントマクロ・PowerPoint VBAの使い方 » PowerPoint VBAでExcelのデータを取得する