[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『(PowerPoint)のスライドにEXCELファイルを添付する』(みゆき)
おはようございます。
PowerPointのスライドにEXCELファイルを添付するマクロをご教授願います。
PowerPointのスライドの10番目にEXCELファイルを添付したいのです。
いろいろ調べてみましたが、わかりませんでした。
よろしくお願いします。
< 使用 Excel:Excel2013、使用 OS:Windows7 >
あまり意味を理解できていないかもしれませんが、 パワポの10番目のスライドにエクセルの指定セル範囲を貼付するようにしています。
Sub TEST()
Dim PP_App As Object Dim PP_Pst As Object Dim PP_Sld As Object
'PowerPointを起動 Set PP_App = CreateObject("PowerPoint.Application") PP_App.Visible = msoTrue
'PowerPointを開く Set PP_Pst = PP_App.Presentations.Open("C:\TEST\プレゼンテーション1.pptx")
'Excelのシート1の範囲をコピー(ここではシート1のA1:C10としています) ThisWorkbook.Worksheets(1).Range("A1:C10").CopyPicture xlScreen, xlPicture
'スライド10番目をセット Set PP_Sld = PP_Pst.Slides(10)
'貼り付け PP_Sld.Shapes.Paste
'位置の調整 With PP_Sld.Shapes(1) .LockAspectRatio = msoFalse .Top = 80 .Left = 80 End With
'オブジェクト解放 Set PP_App = Nothing Set PP_Pst = Nothing Set PP_Sld = Nothing
End Sub (ろっくん) 2018/02/28(水) 12:49
>'位置の調整→PowerPointの10番目のスライドにタイトルが入力してあります。
エクセルの表は、貼付できましたがタイトルが動いて位置調整されます。
>PowerPointのスライドの10番目にEXCELファイルを添付したいのです。
申し訳ありません。私は、「EXCELファイルを添付」したいのです。
よろしくお願いします。
(みゆき) 2018/03/01(木) 09:59
失礼しました。違っていましたか。 では、下記のどちらかが該当しますでしょうか。 TEST3の引数IconFileNameの場所についてはご自身のExcelの格納場所に変更してください。
Sub TEST2() Dim PP_App As Object Dim PP_Pst As Object Dim PP_Sld As Object Const InsertFileName As String = "C:\TEST\TEST.xlsm" 'PowerPointを起動 Set PP_App = CreateObject("PowerPoint.Application") PP_App.Visible = msoTrue 'PowerPointを開く Set PP_Pst = PP_App.Presentations.Open("C:\TEST\プレゼンテーション1.pptx") 'スライド10番目をセット Set PP_Sld = PP_Pst.Slides(10) '挿入 PP_Sld.Shapes.AddOLEObject Left:=100, Top:=100, Width:=250, Height:=100, Filename:=InsertFileName, Link:=msoTrue 'オブジェクト解放 Set PP_App = Nothing Set PP_Pst = Nothing Set PP_Sld = Nothing End Sub
Sub TEST3() Dim PP_App As Object Dim PP_Pst As Object Dim PP_Sld As Object Const InsertFileName As String = "C:\TEST\TEST.xlsm" 'PowerPointを起動 Set PP_App = CreateObject("PowerPoint.Application") PP_App.Visible = msoTrue 'PowerPointを開く Set PP_Pst = PP_App.Presentations.Open("C:\TEST\プレゼンテーション1.pptx") 'スライド10番目をセット Set PP_Sld = PP_Pst.Slides(10) '挿入 PP_Sld.Shapes.AddOLEObject Left:=100, Top:=100, Width:=250, Height:=100, Filename:=InsertFileName, _ DisplayAsIcon:=True, IconFileName:="C:\Program Files (x86)\Microsoft Office\Office15\EXCEL.EXE", _ Link:=msoTrue, IconLabel:=InsertFileName 'オブジェクト解放 Set PP_App = Nothing Set PP_Pst = Nothing Set PP_Sld = Nothing End Sub (ろっくん) 2018/03/01(木) 13:12
リンクの更新を手動に変更するコードを組み込みました。 Sub TEST4() Dim PP_App As Object Dim PP_Pst As Object Dim PP_Sld As Object Dim Shp As Object Const InsertFileName As String = "C:\TEST\TEST.xlsm" 'PowerPointを起動 Set PP_App = CreateObject("PowerPoint.Application") PP_App.Visible = msoTrue 'PowerPointを開く Set PP_Pst = PP_App.Presentations.Open("C:\TEST\プレゼンテーション1.pptx") 'スライド10番目をセット Set PP_Sld = PP_Pst.Slides(10) '挿入 Set Shp = PP_Sld.Shapes.AddOLEObject(Left:=100, Top:=100, Width:=250, Height:=100, Filename:=InsertFileName, _ DisplayAsIcon:=True, IconFileName:="C:\Program Files (x86)\Microsoft Office\Office15\EXCEL.EXE", _ Link:=msoTrue, IconLabel:=InsertFileName) 'リンク更新を手動に変更 Shp.LinkFormat.AutoUpdate = 1 'オブジェクト解放 Set PP_App = Nothing Set PP_Pst = Nothing Set PP_Sld = Nothing End Sub (ろっくん) 2018/03/26(月) 09:55
追記です。 このマクロで貼り付けるリンク以外にシェープにリンクが埋め込まれている場合は すべてのリンクオブジェクトに対してリンク更新を手動に切り替える必要があります。
Sub TEST5() Dim PP_App As Object Dim PP_Pst As Object Dim PP_Sld As Object Dim Shp As Object Dim Sld As Object Const InsertFileName As String = "C:\TEST\TEST.xlsm" 'PowerPointを起動 Set PP_App = CreateObject("PowerPoint.Application") PP_App.Visible = msoTrue 'PowerPointを開く Set PP_Pst = PP_App.Presentations.Open("C:\TEST\プレゼンテーション1.pptx") 'スライド10番目をセット Set PP_Sld = PP_Pst.Slides(10) '挿入 Set Shp = PP_Sld.Shapes.AddOLEObject(Left:=100, Top:=100, Width:=250, Height:=100, Filename:=InsertFileName, _ DisplayAsIcon:=True, IconFileName:="C:\Program Files (x86)\Microsoft Office\Office15\EXCEL.EXE", _ Link:=msoTrue, IconLabel:=InsertFileName) 'リンク更新を手動に変更(すべてのスライドのすべてのシェープ) For Each Sld In PP_Pst.Slides For Each Shp In Sld.Shapes If Shp.Type = 10 Then 'msoLinkedOLEObject Shp.LinkFormat.AutoUpdate = 1 'ppUpdateOptionManual End If Next Next 'オブジェクト解放 Set PP_App = Nothing Set PP_Pst = Nothing Set PP_Sld = Nothing End Sub (ろっくん) 2018/03/26(月) 11:57
1、エクセルファイル間のデータをコピーする処理
2、エクセルグラフをパワーポイントに貼り付ける処理
3.上記の「TEST5」のろっくんさんのマクロ処理
を続けて実行してみました。
Sub 123を実行
call エクセルファイル間のデータをコピーする処理 call エクセルグラフをパワーポイントに貼り付ける処理 call TEST5 End Sub
下記の (TEST5)のマクロ中でセルが黄色くなって停止、実行時エラーがでました。
'挿入 Set Shp = PP_Sld.Shapes.AddOLEObject(Left:=100, Top:=100, Width:=250, Height:=100, Filename:=InsertFileName, _ DisplayAsIcon:=True, IconFileName:="C:\Program Files\Microsoft Office\Office14\EXCEL.EXE", _ Link:=msoTrue, IconLabel:=InsertFileName)
エラー内容:
実行時エラー'-2147467259(800004005)
オートメーションエラーです。
エラーを特定できません。
エラー内容をネットで調べて対処してみましたがうまくいきません。
どうしたらよいでしょう。
ご教授よろしくお願いします。
(みゆき) 2018/03/29(木) 11:52
コードを提示できますか? (ろっくん) 2018/03/29(木) 17:22
コードは、ちょっと長いです。
1、エクセルファイル間のデータをコピーする処理 (コピー処理のみ)
2、エクセルグラフをパワーポイントに貼り付ける処理
3.上記の「TEST5」のろっくんさんのマクロ処理
(3番目のコードは、ろっくんさんの教えてくれた「Sub TEST5()」のマクロ)
2番目は、下記に表示します。
ご確認よろしくお願いします。
Sub PowerPointを起動してプレゼンテーションを開く()
Dim PPT保存フォルダ As String, PPT呼出ファイル名 As String, PPT書込ファイル名 As String
マクロブック名取得 = ActiveWorkbook.Name 'ブック名の取得
Windows(マクロブック名取得).Activate
PPT保存フォルダ = Worksheets("マスタ").Cells(51, 18) PPT呼出ファイル名 = Worksheets("マスタ").Cells(51, 19) PPT呼出 = PPT保存フォルダ & "\" & PPT呼出ファイル名
Set Pポイント = CreateObject("PowerPoint.Application") 'PowerPointを起動 Pポイント.Visible = True 'PowerPointを表示 Set プレゼン = Pポイント.Presentations.Open(PPT呼出) 'プレゼンテーションを開く
End Sub
'図形で貼付られたグラフをPPTへ貼付
Sub GRF()
Dim PPT保存フォルダ As String, PPT書込ファイル名 As String
マクロブック名取得 = ActiveWorkbook.Name 'ブック名の取得
Windows(マクロブック名取得).Activate
PPT書込ファイル名 = Worksheets("マスタ").Range("T51") PPT保存フォルダ = Worksheets("マスタ").Range("R51")
'コレクション生成 Set Objs = New Collection
'「グラフ貼付2」シートにグラフ(図形)あり Dim s1 As Worksheet: Set s1 = Sheets("グラフ貼付2") Dim s2 As Worksheet: Set s2 = Sheets("グラフ貼付2") Dim s3 As Worksheet: Set s3 = Sheets("グラフ貼付2") Dim s4 As Worksheet: Set s4 = Sheets("グラフ貼付2") Dim s5 As Worksheet: Set s5 = Sheets("グラフ貼付2") Dim s6 As Worksheet: Set s6 = Sheets("グラフ貼付2") Dim s7 As Worksheet: Set s7 = Sheets("グラフ貼付2") Dim s8 As Worksheet: Set s8 = Sheets("グラフ貼付2") Dim s9 As Worksheet: Set s9 = Sheets("グラフ貼付2") Dim s10 As Worksheet: Set s10 = Sheets("グラフ貼付2") Dim s11 As Worksheet: Set s11 = Sheets("グラフ貼付2") Dim s12 As Worksheet: Set s12 = Sheets("グラフ貼付2") Dim s13 As Worksheet: Set s13 = Sheets("グラフ貼付2") Dim s14 As Worksheet: Set s14 = Sheets("グラフ貼付2") Dim s15 As Worksheet: Set s15 = Sheets("グラフ貼付2")
Dim s1範囲 As String, s2範囲 As String, s3範囲 As String Dim s4範囲 As String, s5範囲 As String, s6範囲 As String Dim s7範囲 As String, s8範囲 As String, s9範囲 As String Dim s10範囲 As String, s11範囲 As String, s12範囲 As String Dim s13範囲 As String, s14範囲 As String, s15範囲 As String
s1範囲 = Worksheets("マスタ").Range("Q51") & ":" & Worksheets("マスタ").Range("Q51") s2範囲 = Worksheets("マスタ").Range("Q52") & ":" & Worksheets("マスタ").Range("Q52") s3範囲 = Worksheets("マスタ").Range("Q53") & ":" & Worksheets("マスタ").Range("Q53") s4範囲 = Worksheets("マスタ").Range("Q54") & ":" & Worksheets("マスタ").Range("Q54") s5範囲 = Worksheets("マスタ").Range("Q55") & ":" & Worksheets("マスタ").Range("Q55") s6範囲 = Worksheets("マスタ").Range("Q56") & ":" & Worksheets("マスタ").Range("Q56") s7範囲 = Worksheets("マスタ").Range("Q57") & ":" & Worksheets("マスタ").Range("Q57") s8範囲 = Worksheets("マスタ").Range("Q58") & ":" & Worksheets("マスタ").Range("Q58") s9範囲 = Worksheets("マスタ").Range("Q59") & ":" & Worksheets("マスタ").Range("Q59") s10範囲 = Worksheets("マスタ").Range("Q60") & ":" & Worksheets("マスタ").Range("Q60") s11範囲 = Worksheets("マスタ").Range("Q61") & ":" & Worksheets("マスタ").Range("Q61") s12範囲 = Worksheets("マスタ").Range("Q62") & ":" & Worksheets("マスタ").Range("Q62") s13範囲 = Worksheets("マスタ").Range("Q63") & ":" & Worksheets("マスタ").Range("Q63") s14範囲 = Worksheets("マスタ").Range("Q64") & ":" & Worksheets("マスタ").Range("Q64") s15範囲 = Worksheets("マスタ").Range("Q65") & ":" & Worksheets("マスタ").Range("Q65")
'各要素をコレクションにセット 'オブジェクト名(S1), スライド番号(2), 上からの位置(50), 左からの位置(5), 横幅(400), 順番(0→最前面 1→最背面) の順で Call SetProp(s1.Range(s1範囲), 5, 50, 2, 700, 1) Call SetProp(s2.Range(s2範囲), 6, 50, 2, 700, 1) Call SetProp(s4.Range(s4範囲), 8, 50, 2, 700, 1) Call SetProp(s5.Range(s5範囲), 9, 50, 4, 700, 1)
Call SetProp(s6.Range(s6範囲), 10, 52, 5, 700, 1) Call SetProp(s7.Range(s7範囲), 11, 52, 5, 700, 1) Call SetProp(s8.Range(s8範囲), 12, 50, 5, 700, 1) Call SetProp(s9.Range(s9範囲), 13, 50, 5, 700, 1)
Call SetProp(s10.Range(s10範囲), 17, 50, 5, 700, 1) Call SetProp(s11.Range(s11範囲), 18, 50, 5, 700, 1) Call SetProp(s12.Range(s12範囲), 19, 50, 5, 700, 1) Call SetProp(s13.Range(s13範囲), 20, 50, 5, 700, 1) Call SetProp(s14.Range(s14範囲), 21, 50, 5, 700, 1) Call SetProp(s15.Range(s15範囲), 22, 50, 5, 700, 1)
Call PowerPointを起動してプレゼンテーションを開く
'PPTに各要素を貼り付け、後処理 'PPTの準備 On Error GoTo ERROR_HANDLER Dim ppApp As Object: Set ppApp = CreateObject("PowerPoint.Application") 'PPTアプリ Dim pp As Object: Set pp = ppApp.ActivePresentation 'PPTプレゼン Dim ppSld As Object 'PPTスライド
Dim Obj As Class1 For Each Obj In Objs 'Objsコレクションをループ Obj.Name.CopyPicture xlScreen, xlPicture '指定オブジェクトをクリップボードにコピー Set ppSld = pp.Slides(Obj.SldNmb) 'PowerPointスライド指定 ppSld.Shapes.Paste '貼り付け
'位置・サイズを補正 With ppSld.Shapes(ppSld.Shapes.Count) '最終シェイプを指定 .LockAspectRatio = msoTrue '縦横比固定 .Top = Obj.Top '上からの位置 .Left = Obj.Left '左からの位置 .Width = Obj.Width '横幅 .ZOrder Obj.Odr '移動 .Height = 330 '重要 表の高さを調節
End With Next
TERMINATE:
On Error GoTo 0 Set ppApp = Nothing Set pp = Nothing Set ppSld = Nothing Set Objs = New Collection Exit Sub
ERROR_HANDLER:
MsgBox Err.Description, vbCritical Resume TERMINATE End Sub
(みゆき) 2018/03/30(金) 11:55
SetPropとクラスモジュールClass1の中身がが分からないのですが・・。 提示いただくことはできますか? (ろっくん) 2018/03/30(金) 12:47
'Class1
Public Name As Object 'オブジェクト名
Public SldNmb As Integer 'スライド番号
Public Top As Integer '上からの位置
Public Left As Integer '左からの位置
Public Width As Integer '横幅
Public Odr As Integer '順番 0→最前面 1→最背面
Property Get Self() As Class1
Set Self = Me '自己参照 End Property
以上です。よろしくお願いします。
(みゆき) 2018/04/02(月) 08:52
年度の切り替わりで本業が忙しく、レスポンスが悪くてすみません。
変わらずSetPropが分かりませんが、現状はこちらの環境(Win7/Excel2010/PowerPoint2010)で再現できません。 また、PPを閉じるコードがないとか簡略化できそうなところがあるなど気になるところはありますが、 パッと見でおかしな挙動をするようなコードは見受けられません。
Set Shp = PP_Sld.Shapes.AddOLEObject(Left:=100, Top:=100, Width:=250, Height:=100, Filename:=InsertFileName, _ DisplayAsIcon:=True, IconFileName:="C:\Program Files\Microsoft Office\Office14\EXCEL.EXE", _ Link:=msoTrue, IconLabel:=InsertFileName) のIconFileNameのパスに誤りがないか確かめてみてください。 (ろっくん) 2018/04/03(火) 12:44
>IconFileNameのパスに誤りがないか確かめてみてください。
>"C:\Program Files\Microsoft Office\Office14\EXCEL.EXE"
確認しましたが 誤りはありません。
●(TEST5)のマクロのみを実行すればエラーはでませんでした。
お手数をおかけしました。今後ともよろしくお願いします。
(みゆき) 2018/04/03(火) 16:13
無事解決されたようでなによりです(^-^) (ろっくん) 2018/04/05(木) 16:39
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.