質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

3回答

2645閲覧

グラフをパワーポイントに貼り付け

ningen02

総合スコア9

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

2クリップ

投稿2018/08/23 04:46

エクセルのグラフをパワーポイントに「元の書式を保持」したままの貼り付けがしたいです。
しかし実行すると図として貼り付けされてしまいます。
原因と対処方法を教えてほしいです。

VBA

1Sub PowerPointを立ち上げる() 2 Dim ppApp As New PowerPoint.Application 3 Dim ppPt As Presentation 4 Dim ppSlide As Slide 5 Dim ppShape As PowerPoint.Shape 6 Dim ws As Worksheet 7 Dim test_st As String 8 Dim i As Long 9 Dim x As Long 10 Dim ppPrs As Presentation 11 Set ppPrs = ppApp.Presentations.Open(ThisWorkbook.Path & "\グラフ@.pptx") 12 Set ws = ThisWorkbook.Worksheets("A_01") 13 14 'グラフの貼り付け 15 'CPU 16 For i = 1 To 18 17 18 ws.ChartObjects("グラフ " & i).Chart.CopyPicture 'グラフを画像としてコピー 19 ppPrs.Slides(i).Shapes.PasteSpecial DataType:=ppPasteEnhancedMetafile, Link:=msoFalse 'パワーポイントのコマンドで貼り付け 20 If ppApp.ActiveWindow.Selection.Type = ppSelectionNone Or ppApp.ActiveWindow.Selection.Type = ppSelectionSlides Then 21 Exit Sub 22 End If 23 24 For Each ppShape In ppApp.ActiveWindow.Selection.ShapeRange 25 ppShape.LockAspectRatio = msoFalse 26 ppShape.Left = Application.CentimetersToPoints(0.8) 27 ppShape.Top = Application.CentimetersToPoints(3.7) 28 ppShape.Width = Application.CentimetersToPoints(11.875) 29 ppShape.Height = Application.CentimetersToPoints(4.6) 30 Next ppShape 31 32 Next i 33 34End Sub 35 36

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ws.ChartObjects("グラフ " & i).Chart.CopyPicture 'グラフを画像としてコピー

で、グラフを画像としてコピーしていますから、それを張り付けたものも画像になります。

投稿2018/08/23 04:59

coco_bauer

総合スコア6915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ningen02

2018/08/23 05:16

ws.ChartObjects("グラフ " & i).Chart.Copy に変えても結果は同じになりました。 どうすればいいでしょうか?
guest

0

ベストアンサー

調べてみた所、PowerPointのPasteSpecialのDataTypeには「元の書式を保持」がないので、ExecuteMsoでコマンド実行するしかないようです。

参考URLの下部コメント欄を参照
https://ateitexe.com/powerpoint-paste-datatype/

以下、上記URLのコードコピペです。(たかぴーさん作)
※ExecuteMsoは非同期実行なので、グラフ貼り付けが終わるまで待つ処理がポイントです。

VBA

1'貼り付け前のシート数取得 2shc = ppSld.Shapes.Count 3 4'貼り付け 5ppApp.CommandBars.ExecuteMso "PasteExcelChartSourceFormatting" 6 7'貼り付け前の枚数が変わるまでwait 8Do While shc = ppSld.Shapes.Count 9 DoEvents 10Loop

投稿2018/08/29 07:57

FKD

総合スコア268

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ningen02

2018/08/30 05:49

ありがとうございます。 無事、実装することが出来ました。
guest

0

画像としてコピーし、さらに

VBA

1ppPrs.Slides(i).Shapes.PasteSpecial DataType:=ppPasteEnhancedMetafile,

で張り付け時にも「EnhancedMetafile(拡張メタファイル)」という画像形式で張り付けているので、ここも手を入れる必要があるようにおもいます。ちょっと同じようなものを作って試す暇がないのでとりあえずぱっと見の指摘だけでごめんなさい。

投稿2018/08/23 06:52

backyard

総合スコア534

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ningen02

2018/08/23 07:46

ありがとうございます。 どのように修正したら元の書式を保持して貼り付けが出来るかご教授いただきたいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問