1359868148 EXCELVBAで既存パワーポイントを開き、セル値を取得してパワーポイントファイル名としたい

ソースは添付画像をご確認していただき、
元ネタ:http://ateitexe.com/excelvba/ppt-select-paste/

以下の項目ができるようにしたい。
・ファイルサーバー上にあるパワーポイント原本をコピー
・コピーしたパワーポイントにEXCELグラフを貼付け
・EXCELのセル値(B1)をパワーポイントファイル名にする
・パワーポイントファイルの保存先は、どのユーザーでもデスクップ上にしたい

以上、よろしくお願いします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/02/04 21:11:46
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:oil999 No.1

回答回数1728ベストアンサー獲得回数320

ポイント300pt

以下のマクロをお試しください。
質問にあったリンク先の通り、次の変数に値を設定しておく必要があります。

  • sheet
  • sour
  • PecNmb
  • ShtNam
  • GrpNmb
Option Explicit

Sub select_CopyToPPT()
    Dim ppApp As Object 'PowerPointアプリ
    Dim ppPst As Object 'PowerPointプレゼン
    Dim ppSld As Object 'PowerPointスライド
    Dim sheet As String
    Dim n As Integer, i As Integer, flg As Boolean
    Dim PecNmb As Integer, ShtNam As Variant, GrpNmb As Variant, SldNmb As Variant
    Dim sour As String, path As String, ppname As String

    'ファイル名のあるシート名
    sheet = "Sheet2"
    'サーバにあるPowerPointファイル
    sour = "\\Server\hoge\hoge.pptx"
    '処理したいExcelグラフの数
    PecNmb = 3
    'コピーしたいExcelグラフが存在するシート名
    ShtNam = Array("Sheet1", "Sheet2", "Sheet3")
    'コピーしたいExcelグラフの名前
    GrpNmb = Array("グラフ 1", "グラフ 2", "グラフ 3")
    '貼り付け先PowerPointのスライド番号
    SldNmb = Array(1, 2, 3)

    path = CreateObject("WScript.Shell").SpecialFolders.Item("Desktop") & "\"
    ppname = Worksheets(sheet).Range("B1").Value
    
    FileCopy sour, path & ppname
    Set ppApp = CreateObject("PowerPoint.Application")
    With ppApp
        .Visible = True
        .Presentations.Open Filename:=path & ppname, ReadOnly:=msoFalse
    End With
    Set ppPst = ppApp.ActivePresentation

    For n = 0 To PecNmb - 1
      '指定範囲をクリップボードにコピー
      Sheets(ShtNam(n)).ChartObjects(GrpNmb(n)).CopyPicture xlScreen, xlPicture
      'PowerPointスライド指定
      Set ppSld = ppPst.Slides(SldNmb(n))
      '貼り付け
      ppSld.Shapes.Paste
    Next n
    ppPst.Save
    ppPst.Close
    ppApp.Quit
End Sub

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません