ExcelマクロでグラフをPowerPointにリンク貼り付けする方法

このQ&Aのポイント
  • Excelマクロを使用して、グラフをPowerPointにリンク貼り付けする方法について教えてください。
  • グラフ作成後、データが変更されるケースがあるため、PowerPointにリンク貼り付けを行っています。
  • 作業短縮のためにマクロ化を進めており、Q&Aを参考にPowerPointの起動やスライド追加はできましたが、リンク貼り付けでエラーが発生しています。解決方法を教えてください。
回答を見る
  • ベストアンサー

ExcelマクロでグラフをPowerPointにリンク貼り付けする方法

グラフ作成後データが変更にされるケースがあるので、Powerpointにリンク貼り付けをしていますが、グラフ数が多いので作業短縮のためマクロ化を進めています。 Q&Aを参考に、PowerPointの起動・スライド追加まではできたのですが、PowerPointの読み取りマクロで得られたリンク貼り付けと思われる実行文で「実行エラー Selection.ShapeRange : 無効な要求です。適切な項目が選択されていません。」というエラーが発生し、お手上げの状態です。解決方法をご教授願います。 Set ppApp = CreateObject("PowerPoint.Application") : : For Each Sh In ActiveWorkbook.Worksheets For i = 1 To Sh.ChartObjects.Count      '//対象グラフをコピー     Sh.ChartObjects(i).Copy     ' // PP 新規スライド挿入     Set ppSld = ppPst.Slides.Add(Index:=i, _     Layout:=ppLayoutBlank)     ' // PP 貼り付け           ↓ここでエラー発生     With ppApp.ActiveWindow.Selection.ShapeRange(i)    .Height = 409.5    .Width = 649.25     End With Next i Next Sh

質問者が選んだベストアンサー

  • ベストアンサー
  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.2

[回答番号:No.1] の DOUGLAS_ です。 >リンク貼り付け・・・ >読み取りマクロで・・・ でしたね。  [回答番号:No.1]は取り下げます。  私もいろいろと WEB検索 してみて ppApp.ActiveWindow.View.PasteSpecial DataType:=ppPasteOLEObject, Link:=msoTrue あたりでいけるかとも思ったのですが、どうも「クリップボード 経由の Excel グラフ」に見合う「DataType」がなさそうですし、大体、VBA の実行中には、PowerPoint 自体で、[形式を選択して貼り付け] - [リンク貼り付け] が グレイアウト して選択できない状態のようですので、ひょっとしたら、VBA で「リンク貼り付け」すること自体無理なのかも知れません。  ちなみに、ppApp の方を AppActivate して Application.SendKeys "%ES%L{ENTER}" とでもしようかと思いましたが、これでも [リンク貼り付け(L)] が グレイアウト してます。

kfee3567
質問者

お礼

DOUGLAS_さん 回答の返信が遅くなっていすみません。 ご指摘の内容をこちらでのも確認できました。おっしゃるように[リンク貼り付け] が無理なのかもしれません。 冷静になって考えると、PowerPointにグラフを貼付けた後に変更が反映される「リンク貼り付け」にこだわっていましたが、マクロで操作が自動化されるので、グラフ変更の度にグラフ貼付けをし直せばいいことで、それは何ら問題にはなりません。 折角の回答ですが、グラフを図形として貼り付ける様に変更することにしました。  ありがとうございました。また、お騒がせしました。

その他の回答 (2)

  • DreamyCat
  • ベストアンサー率56% (295/524)
回答No.3

Selectしないでオブジェクトを操作したいとき、 パワーポイントでこの2つのどちらかを 自分に都合のよい使い方で使ってみて 動作の違いを比べてみてください。 (数字の1のところは必要に応じて変数や オブジェクト名などで指定しておきます。) With ActiveWindow.Presentation.Slides(1).Shapes.Range With ActiveWindow.Presentation.Slides(1).Shapes(1)

kfee3567
質問者

お礼

指摘の命令文を実行してみましたが、両方とも「オブジェクトはプロパティ・メソットをサポートしていません」というエラーとなってしまいます。 回答くださった、もう一方の DOUGLAS_さん が指摘されているとおり、リンク貼り付けはサポートされたいないと判断し、別な方法で問題を回避しました。 回答ありがとうございました。

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.1

With ppApp.ActiveWindow.Selection.ShapeRange(i) の最後の「(i)」は「(1)」ではありませんか?

関連するQ&A

  • エクセル・マクロでグラフを最背面に移動させたい

    エクセルのグラフを3つピッタリと重ねて表示しています 後ろのグラフを選択する時「最背面に移動」させてますが これをマクロにしたいです とりあえずマクロの記録でしてみたら Sub Macro1() ActiveSheet.ChartObjects("グラフ 7").Activate ActiveChart.ChartArea.Select Selection.ShapeRange.ZOrder msoSendToBack ActiveWindow.Visible = False Windows("Book1.xls").Activate Range("A1").Select ActiveSheet.ChartObjects("グラフ 5").Activate ActiveChart.ChartArea.Select Selection.ShapeRange.ZOrder msoSendToBack ActiveWindow.Visible = False Windows("Book1.xls").Activate Range("A1").Select ActiveSheet.ChartObjects("グラフ 2").Activate ActiveChart.ChartArea.Select Selection.ShapeRange.ZOrder msoSendToBack ActiveWindow.Visible = False Windows("Book1.xls").Activate Range("A1").Select End Sub と出来たのですが、マクロの実行そしてみると3列目の Selection.ShapeRange.ZOrder msoSendToBack の所で、 「実行時エラー438 オブジェクトはこのプロパティまたはメソッドをサポートしてません」 となってしまいます、どうすればよいのでしょう ボタンを押したら最前面のグラフが最背面に移動するようにしたいのですが難しいのでしょうか

  • エクセルマクロのグラフ操作

    エクセルにてグラフの線の色を変えるマクロを記録し そのまま実行するとエラーになります。 (Lineメソッドは失敗しました) どこを変更すれば上手くいきますでしょうか。 '------------------------記録したマクロ ActiveSheet.ChartObjects("グラフ 1").Activate ActiveChart.Legend.Select ActiveChart.Legend.LegendEntries(1).Select With Selection.Format.Line .Visible = msoTrue .ForeColor.RGB = RGB(192, 0, 0) .Transparency = 0 End With 環境 Windows 7 Office 2010

  • EXCELグラフをPowerPointに貼り付ける作業のマクロ化

    EXCELで造ったグラフをコピーして、PowerPointで、形式を選択して貼り付けでピクチャ(拡張メタファイル)で貼り付ける作業のマクロ化を 行いたいと考えておりますが、PowerPoint側の操作をマクロ記録しても記録されません。何か良い方法はありますか? ※バージョンはOffice2000です。 よろしくお願いします。

  • Excelマクロによるグラフの消去方法

    Excelマクロ初心者です。 マクロで、グラフを消去する操作をさせたいのですが、どのグラフを消去するかというグラフの指定をどうしたら良いか悩んでいます。 単純に記録マクロでやってみると、以下のようになりました。「グラフ1」といったグラフの名前が分かっていればこれをそのまま応用すればいいのですが、グラフの名前が不明の場合にはどうしたらよいのでしょうか。マクロの中で、グラフの位置などから、グラフの名前を取得するといったようなことなどできるのでしょうかね。どういった方法でも結構ですので、よろしくお願いいたします。 Sub Macro1() ActiveSheet.ChartObjects("グラフ 1").Activate ActiveChart.ChartArea.Select ActiveWindow.Visible = False Selection.Delete End Sub

  • エクセルに画像を貼付け縮小する作業をマクロにしたいのですが、

    エクセルに画像を貼付け縮小する作業をマクロにしたいのですが、 分からない部分があって困ってます。 (1)挿入したいセルにカーソルを合わせる (2)マクロ  挿入-図-ファイル-図の挿入-図の書式設定-サイズ-30% この作業を覚えさせると以下になりました。 Sub Macro3() ActiveSheet.Pictures.Insert("C:\Documents and Settings\デスクトップ\1.JPG") _ .Select Selection.ShapeRange.LockAspectRatio = msoTrue Selection.ShapeRange.Height = 360# Selection.ShapeRange.Width = 480# Selection.ShapeRange.Rotation = 0# End Sub これだと、写真が指定されてしまいます。 マクロの途中で止まって任意の写真を都度選べるようにできますか? 膨大な量の写真をセルに並べていきたいのです。

  • Excel マクロでグラフの凡例の位置を変更したい

    はじめまして。 Excelマクロ初心者です。 現在、Excelのグラフの凡例の位置を変更するマクロが作れなくて困っております。 =前提条件=     ・マクロを記録するbook(1)とグラフを含むbook(2)は別のファイル     ・book(1)よりマクロを実行し、book(2)を開き、グラフの凡例の位置を変えたい =book(2)の構成=     ・複数のシートが存在(Hiddenも存在)     ・各シートにグラフが複数存在 =現時点で作成したマクロ= Sub graph()   Workbooks.open "C:\********\book(2).xls"   Workbooks("book(2).xls").Active   Dim i AS Integer, wsCnt AS Integer i = 0 wsCnt = Worksheets.Count   For i = 0 To wsCnt Worksheets(i).Active If ActiveSheet.Visible = -1 - xlSheetVisibe Then For Each ChartObject In ActiveSheet.ChartObjects      With ActiveChart ActiveChart.ChartArea.Select ActiveChart.HasLegend = True ActiveChart.Legend.Select Selection.Position = xlBottom End With Next ChartObject End If Next i End Sub 現在、各シートがActiveになることまでは確認できています。 各グラフを掴めているかは確認できておりません。 以上となります。 ご多忙とは思いますが、ご教授いただけると幸いです。 宜しくお願い致します。

  • エクセル。マクロの記録で出来たVBAを書き直したい。

    エクセル2000(OSはWindows2000)でマクロの記録を行いました。 四角形を出してA1セルにリンクさせフォント等の設定をしたものです。 Sub Macro5() ActiveSheet.Shapes.AddShape(msoShapeRectangle, 200#, 100#, 140#, 80#). _ Select ExecuteExcel4Macro "FORMULA(""=R1C1"")" With Selection.Font .Name = "Century Gothic" .FontStyle = "太字" .Size = 72 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ColorIndex = xlAutomatic End With Selection.ShapeRange.Fill.Visible = msoFalse Selection.ShapeRange.Fill.Transparency = 0# Selection.ShapeRange.Line.Weight = 0.75 Selection.ShapeRange.Line.DashStyle = msoLineSolid Selection.ShapeRange.Line.Style = msoLineSingle Selection.ShapeRange.Line.Transparency = 0# Selection.ShapeRange.Line.Visible = msoFalse End Sub これを、実際には四角形をセレクトしないで実行させたいのです。 With ActiveSheet.Shapes.AddShape~ End With といった形になるのでしょうが、どうもうまく出来ません。 ご教示いただければ幸いです。

  • PowerPointのVBAで、図形を縮小後、画質を落とさずに出力する方法

    PowerPointのVBAで、スライド上の図形のサイズを縮小した後、この図形をjpg画像として保存したいです。 オペレーションはこんな感じです↓ 図形縮小→図形を選択→右クリック→[図として保存]→JPGファイル名で保存 上記操作を「マクロの記録」で記録したものを実行すると、スライド全体が保存されてしまいます。 また、マクロで.ShapeRange.Exportで画像出力すると、画質が荒くなって出力されます。 画質を落とさず、図形をjpgとして保存する方法はないでしょうか。 よろしくお願い致します。 以下が、現状の私のプログラムです。 Sub Macro() ActiveWindow.Selection.SlideRange.Shapes.AddPicture(FileName:="C:\aaaa.JPG", LinkToFile:=msoFalse, SaveWithDocument:=msoTrue, Left:=-119, Top:=-89, Width:=960, Height:=720).Select ActiveWindow.LargeScroll ToRight:=1 With ActiveWindow.Selection.ShapeRange .ScaleWidth 0.25, msoFalse, msoScaleFromTopLeft .ScaleHeight 0.25, msoFalse, msoScaleFromTopLeft End With With ActiveWindow.Selection.ShapeRange .IncrementLeft 219.12 .IncrementTop 416.75 End With ActiveWindow.Selection.ShapeRange.Select 'これだと画質が落ちます。↓ Call ActiveWindow.Selection.ShapeRange.Export("C:\\bbb.jpg", ppSaveAsJPG) 'これだとスライド全体が保存されます。↓ ' ActivePresentation.SaveAs FileName:="C:\bbb.jpg", FileFormat:=ppSaveAsJPG, EmbedTrueTypeFonts:=msoFalse End Sub

  • PowerPointにExcelファイルのデータをリンクさせるには?

    Excel2002を使用してアンケートのデータを集計しています。そのデータを利用して、プレゼンテーション(PowerPoint2002使用)を作成したいのです。昨年作成したプレゼンテーションがあり、それを変更したいのですが、データを差し替えると、もとデータの配置がバラバラになってしまいます。 配置は以下のようにしたいのです。 グラフ(Excelで作成したものをリンク)  表(Excelで作成したものをリンク) グラフ(Excelで作成したものをリンク)  表(Excelで作成したものをリンク) グラフ(Excelで作成したものをリンク)  表(Excelで作成したものをリンク) ※グラフ部分は、昨年はオートシェイプで円グラフを描いていました。 ※表部分は、昨年はPowerPointの表で作成していました。 このように、左側にグラフを3つ、右側に表を3つ、Excelファイルが更新されるとPowerPointのファイルも更新されるように、リンクさせたいのです。スライドのレイアウトの作業ウィンドウの中には、4つのコンテンツというレイアウトがありますが、これを6つのコンテンツに変更することはできるのでしょうか?コンテンツのプレースホルダを追加することはできますか? コンテンツの枠内に、リンク貼り付けすると配置が乱れません。 PowerPoint初心者のため、とても苦戦しています。どなたか良い方法がございましたら、ご指導お願いいたします。

  • マクロを使ってexcel2007でテキストボックス内をセンタリングしたい

    以前、excel2000でマクロの児童記録で記録し、それを利用して 下のようなマクロを使っていました (列ボックス1は変数) ActiveSheet.Shapes.AddTextbox(msoTextOrientationVerticalFarEast, 列ボックス1, 205 , 15, 105).Select Selection.Characters.Text = 顧客名 With Selection.Characters.Font .Name = "MS Pゴシック" .FontStyle = "標準" .Size = 8 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ColorIndex = 3 End With With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlTop .Orientation = xlVertical .AutoSize = False .AddIndent = False End With Selection.ShapeRange.Fill.Visible = False Selection.ShapeRange.Fill.Solid Selection.ShapeRange.Fill.Transparency = 1# Selection.ShapeRange.Line.Weight = 0.75 Selection.ShapeRange.Line.DashStyle = msoLineSolid Selection.ShapeRange.Line.Style = msoLineSingle Selection.ShapeRange.Line.Transparency = 0# Selection.ShapeRange.Line.Visible = msoFalse Selection.ShapeRange.TextFrame.MarginLeft = 0 Selection.ShapeRange.TextFrame.MarginRight = 0 Selection.ShapeRange.TextFrame.MarginTop = 0 Selection.ShapeRange.TextFrame.MarginBottom = 0 これで問題なく動作していたのですが excel2007で動作させると テキストボックス内が水平方向にセンタリングされていません。 excel2007でテキストボックスをかく記録をしてもマクロには何も残らず 困っています。 excel2007でも、センタリングさせる方法を教えて下さい どうかよろしくお願いします

専門家に質問してみよう