- 締切済み
パワーポイントのマクロでエクセルを操作する方法
初めて投稿いたします。 最近マクロを勉強し始めたのですが、パワーポイントに埋め込んだエクセルをマクロで動かすことができるでしょうか? やりたい内容としては、 ・パワーポイントに埋め込まれたエクセルデータを開く ・エクセルのデータを編集 ・エクセルを閉じる ・いくつかののページでこれを繰り返す です。 新しいマクロを記録で記録し、マクロを実行するとパワーポイントのテキストなどは変更されるのですが、エクセルデータはもとのままです。 どなたか教えてください。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- n_na_tto
- ベストアンサー率70% (75/107)
そうですね。 確かに難易度の高いことにチャレンジしようとしています。 参照設定のこととか、まだ次のステップがあったのですが、 あきらめてください。 理由は以下の通りです。 1.環境に左右される Macや古いバージョンのExcelでは下のコードは動かないと思います。 2.仮にそうではなかったとしても ・Excel,PowerPointのバージョンも最後まで 書き込まない ・Excelのコードは書けるのかを知りたかったので、 Excelでマクロ記録をとれという意味なのに PowerPointの無駄なマクロ記録を書き込む など、あなたの現在のスキルでは無理だと思います。
- n_na_tto
- ベストアンサー率70% (75/107)
では、Excel2000でも動くコードに修正。 下の手順でテストをしてください。 これが動く環境でないと何も始まりません。 Excelでどこかに「あ」という文字を含む表を作成 →範囲をコピー →PowerPointで新規作成したファイルに 貼り付け【Excelの表(ブック全体)】 または 形式を選択して貼り付け【Microsoft Excel ワークシートオブジェクト】 →Excel終了 →以下のコードを必ずSub~End Subまで貼り付け Sub xl_Test() Dim objExl As Object 'Excelに参照設定していればExcel.Application Dim myBook As Object 'Excel.Workbook Dim n As Long Dim Shp As Shape ActiveWindow.ViewType = ppViewNormal With ActivePresentation.Slides For n = 1 To .Count ActiveWindow.View.GotoSlide n For Each Shp In .Item(n).Shapes With Shp If .Type = msoEmbeddedOLEObject Then With .OLEFormat If Left$(.ProgID, 11) = "Excel.Sheet" Then .DoVerb (2) Set myBook = .Object Set objExl = myBook.Application objExl.DisplayAlerts = False With myBook.Worksheets(1).Cells .Replace What:="あ", _ Replacement:="A" End With myBook.Close objExl.DisplayAlerts = True objExl.Quit End If End With End If End With Next Next n End With Set myBook = Nothing Set objExl = Nothing End Sub
- n_na_tto
- ベストアンサー率70% (75/107)
で、新規ファイルにExcelの表を埋め込んで、 No.2のコードを試してみましたか? それからExcelだけの部分のコードは? もちろんマクロ記録でもOKです。 以上2つ、お答えください。
- n_na_tto
- ベストアンサー率70% (75/107)
最初のconstの2行を忘れました。 NO.1のコードは無視してください。 Sub xl_Test() Const xlPart = 2 Const xlByRows = 1 Dim objExl As Object 'Excelに参照設定していればExcel.Application Dim myBook As Object 'Excel.Workbook Dim n As Long Dim Shp As Shape ActiveWindow.ViewType = ppViewNormal With ActivePresentation.Slides For n = 1 To .Count ActiveWindow.View.GotoSlide n For Each Shp In .Item(n).Shapes With Shp If .Type = msoEmbeddedOLEObject Then With .OLEFormat If Left$(.ProgID, 11) = "Excel.Sheet" Then .DoVerb (2) Set myBook = .Object Set objExl = myBook.Application objExl.DisplayAlerts = False With myBook.Worksheets(1).Cells .Replace What:="あ", _ Replacement:="A", _ LookAt:=xlPart, _ SearchOrder:=xlByRows, _ MatchCase:=False, _ SearchFormat:=False, _ ReplaceFormat:=False End With myBook.Close objExl.DisplayAlerts = True objExl.Quit End If End With End If End With Next Next n End With Set myBook = Nothing Set objExl = Nothing End Sub
補足
返信が遅くなり、申し訳ありません。 No.2を入れ込むとコンパイルエラー End Subが必要ですとメッセージが出ます。 EXCELのコードは記録をしていくと下記のようになります。 ・パワーポイントに埋め込まれたエクセルデータを開く ・エクセルのデータを編集 ・エクセルを閉じる ・いくつかののページでこれを繰り返す (コード) ActiveWindow.Selection.SlideRange.Shapes("Object 15").Select ActiveWindow.Selection.ShapeRange.OLEFormat.DoVerb Index:=1 ActiveWindow.SmallScroll Down:=1 ActiveWindow.View.GotoSlide Index:=2 ActiveWindow.Selection.SlideRange.Shapes("Object 5").Select ActiveWindow.Selection.ShapeRange.OLEFormat.DoVerb Index:=1 ActiveWindow.SmallScroll Down:=1 ActiveWindow.View.GotoSlide Index:=3 ActiveWindow.Selection.SlideRange.Shapes("Object 18").Select ActiveWindow.Selection.ShapeRange.OLEFormat.DoVerb Index:=1 ActiveWindow.SmallScroll Down:=1 ActiveWindow.View.GotoSlide Index:=4 ActiveWindow.Selection.SlideRange.Shapes("Object 84").Select ActiveWindow.Selection.ShapeRange.OLEFormat.DoVerb Index:=1
- n_na_tto
- ベストアンサー率70% (75/107)
Excelの編集内容がわからないと無理です。 置換するのか、*.xlsファイルとして書き出すのか。 下のコードは「あ」を「A」に置換するサンプルです。 Sub xl_Test() Dim objExl As Object 'Excelに参照設定していればExcel.Application Dim myBook As Object 'Excel.Workbook Dim n As Long Dim Shp As Shape ActiveWindow.ViewType = ppViewNormal With ActivePresentation.Slides For n = 1 To .Count ActiveWindow.View.GotoSlide n For Each Shp In .Item(n).Shapes With Shp If .Type = msoEmbeddedOLEObject Then With .OLEFormat If Left$(.ProgID, 11) = "Excel.Sheet" Then .DoVerb (2) Set myBook = .Object Set objExl = myBook.Application objExl.DisplayAlerts = False With myBook.Worksheets(1).Cells .Replace What:="あ", _ Replacement:="A", _ LookAt:=xlPart, _ SearchOrder:=xlByRows, _ MatchCase:=False, _ SearchFormat:=False, _ ReplaceFormat:=False End With myBook.Close objExl.DisplayAlerts = True objExl.Quit End If End With End If End With Next Next n End With Set myBook = Nothing Set objExl = Nothing End Sub
補足
ありがとうございます。 EXCELデータの書き出しです。 EXCELの内容は、先月と今月のデータ更新で、たとえばA列が先月データ、B列が今月データ。 今月データを先月データに移し、今月データを入力出来るように、今月データを空欄にすると言った具合です。
お礼
教えて頂いた通りにし、コードを入力しましたが、またコンパイルエラーが出てしまいました。 私の環境では実現が難しいのでしょうか? 今回はあきらめることに致します。 何度もお返事いただきましてありがとうございました。