Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


22240 / 76734 ←次へ | 前へ→

【59877】Re:エクセルグラフをパワーポイントに張り付けるには
発言  kanabun  - 09/1/15(木) 11:11 -

引用なし
パスワード
   ▼初心者 さん、Yuki さん:

横からスミマセン。

>(3)について
>>' // XL グラフを Picture 形式でコピー
>>Sh.ChartObjects(i).CopyPicture xlScreen, xlPicture
>Sh.ChartObjects(i).CopyPicture xlScreen, xlBitmap
>にすれば
>.Cut と .Paste <= は要らなくなりますね。

なるほどです。
ただ、
>   .CopyPicture xlScreen, xlBitmap
にすると、グラフの枠線の上と左が消えてコピーされませんか?
環境のせいかもしれません。

で、一応、元の方式
  Picture形式でコピーして、CUTして BMP形式にする方法
でのサンプルです。

Sub XLCharts_PasteSpecial_xlBitMap()

' // グラフウインドウとなっているものは対象外です。

Dim ppApp As Object ' PowerPoint.Application
Dim ppPst As Object ' PowerPoint.Presentation
Dim ppSld As Object ' PowerPoint.Slide
Dim Sht As Worksheet
Dim Obj As Object
Dim iCount As Integer
Dim sngPosOffset As Single
Dim i As Long

' // PowerPoint(以下PP) 定数
Const ppLayoutBlank = 12
Const ppPasteBitMap = 1
Const ppPasteEnhancedMetafile = 2

 ' // PP 起動
 On Error Resume Next
 Set ppApp = CreateObject("PowerPoint.Application")
 If ppApp Is Nothing Then Err.Raise 1000, , "PowerPoint cannot be started."
 On Error GoTo Err_
 
 ' // PP を表示する
 ppApp.Visible = True
 ' // PP 新規プレゼンテーション作成
 Set ppPst = ppApp.Presentations.Add(WithWindow:=True)
 ' // XL 処理グラフ数カウンタ
 iCount = 0
 ' // PP グラフ貼り付け位置初期値
 sngPosOffset = 0
 
 ' // XL グラフの貼り付け開始
 For Each Sht In ActiveWorkbook.Worksheets
   For i = 1 To Sht.ChartObjects.Count
     ' // XL グラフを Picture 形式でコピー
     Sht.ChartObjects(i).CopyPicture xlScreen, xlPicture
     ' // PP 新規スライド挿入
     iCount = iCount + 1
     Set ppSld = ppPst.Slides.Add(Index:=iCount, _
           Layout:=ppLayoutBlank)
     ' // PP 貼り付け
     ppSld.Shapes.PasteSpecial(ppPasteEnhancedMetafile).Cut
     With ppSld.Shapes.PasteSpecial(ppPasteBitMap)
       ' // PP グラフ位置・サイズ補正
       .LockAspectRatio = msoTrue
       .Top = sngPosOffset
       .Left = sngPosOffset
       .Height = .Height * 0.5 ' // 50%縮小
     End With
   Next i
 Next Sht
 If iCount = 0 Then
   ppApp.Quit
 Else
   AppActivate Application.Caption
   MsgBox CStr(iCount) & _
      "枚のグラフを処理しました", vbInformation
 End If
 
Bye_:
 On Error GoTo 0
 Set ppApp = Nothing: Set ppPst = Nothing
 Set ppSld = Nothing: Set Sht = Nothing
 Exit Sub
Err_:
 MsgBox Err.Description, vbCritical
 Resume Bye_
End Sub

7 hits

【59873】エクセルグラフをパワーポイントに張り付けるには 初心者 09/1/15(木) 8:41 質問
【59876】Re:エクセルグラフをパワーポイントに張り... Yuki 09/1/15(木) 10:29 発言
【59877】Re:エクセルグラフをパワーポイントに張り... kanabun 09/1/15(木) 11:11 発言
【59880】Re:エクセルグラフをパワーポイントに張り... Yuki 09/1/15(木) 11:39 発言
【59883】Re:エクセルグラフをパワーポイントに張り... 初心者 09/1/15(木) 13:23 質問

22240 / 76734 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free