dポイントプレゼントキャンペーン実施中!

初めて投稿いたします。
最近マクロを勉強し始めたのですが、パワーポイントに埋め込んだエクセルをマクロで動かすことができるでしょうか?

やりたい内容としては、
・パワーポイントに埋め込まれたエクセルデータを開く
・エクセルのデータを編集
・エクセルを閉じる
・いくつかののページでこれを繰り返す
です。

新しいマクロを記録で記録し、マクロを実行するとパワーポイントのテキストなどは変更されるのですが、エクセルデータはもとのままです。

どなたか教えてください。

A 回答 (5件)

そうですね。


確かに難易度の高いことにチャレンジしようとしています。
参照設定のこととか、まだ次のステップがあったのですが、
あきらめてください。
理由は以下の通りです。

1.環境に左右される
Macや古いバージョンのExcelでは下のコードは動かないと思います。

2.仮にそうではなかったとしても
・Excel,PowerPointのバージョンも最後まで
書き込まない
・Excelのコードは書けるのかを知りたかったので、
Excelでマクロ記録をとれという意味なのに
PowerPointの無駄なマクロ記録を書き込む
など、あなたの現在のスキルでは無理だと思います。
    • good
    • 0

では、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
    • good
    • 0
この回答へのお礼

教えて頂いた通りにし、コードを入力しましたが、またコンパイルエラーが出てしまいました。
私の環境では実現が難しいのでしょうか?
今回はあきらめることに致します。
何度もお返事いただきましてありがとうございました。 

お礼日時:2009/01/19 12:54

で、新規ファイルにExcelの表を埋め込んで、


No.2のコードを試してみましたか?

それからExcelだけの部分のコードは?
もちろんマクロ記録でもOKです。

以上2つ、お答えください。
    • good
    • 0

最初の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

補足日時:2009/01/18 11:58
    • good
    • 0

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列が今月データ。
今月データを先月データに移し、今月データを入力出来るように、今月データを空欄にすると言った具合です。

補足日時:2009/01/17 15:51
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています