Home » パワーポイントマクロ・PowerPoint VBAの使い方 » PowerPoint VBAでExcelのデータを取得する

動作検証バージョン:64bit Windows 10 Pro + 32bit PowerPoint + Excel(バージョン2104 ビルド13929.20386 Microsoft Store)

「powerpoint VBAでEXCELの値を取得」
といった検索キーワードで、このサイト『インストラクターのネタ帳』へアクセスがありました。

[スポンサードリンク]

PowerPoint VBAで起動済みのExcelからデータを取得する

(短いコードで済む)起動済みのExcelからデータを取得する、PowerPoint VBAのSubプロシージャから確認しましょう。

Sub 起動済Excelからデータを取得する()
 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プロシージャです。

Sub Excelを起動してデータを取得する()
 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

End Sub

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

[スポンサードリンク]

Home » パワーポイントマクロ・PowerPoint VBAの使い方 » PowerPoint VBAでExcelのデータを取得する

「パワーポイントマクロ・PowerPoint VBAの使い方」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.