前提・実現したいこと
Excelで作成した表やグラフをPowerPointへ反映させ、資料を更新したい。
Loop処理で、Excel内の数値の更新→PowerPointを名前を付けて保存を繰り返したい。
VBAのコードを書いてみたが、下記で躓いているため、解決策がおわかりの方がいらっしゃればご教示いただきたい。
発生している問題・エラーメッセージ
①Loop処理の2巡目でPowerPoint自体が落ちてしまい、次の処理が実行できない(1巡目のPowerPointファイル作成や2巡目のExcel更新はできている)
下記記載のソースコードを1行ずつ実行すると、
Set ppPrs = ppApp.Presentations.Open(Address & fmt_W2)
の行でPowerPoint自体が落ちてしまう
②「PowerPointのリンクを更新」が動作しない(調べたがやり方がわからない)
エラーメッセージ
該当のソースコード
ソースコード
Sub PPT作成()
' 商談資料PPT作成 Macro
'ファイル名・シート名・フォルダ場所を変数で定義
Dim fmt_W As String
Dim fmt_W2 As String
Dim Address As String
Dim manual As String
Dim data1 As String
Dim time As String
Dim NewName As String
Dim Filename As String
'変数に入れる名称(シート名)を設定
fmt_W = "商談資料.xlsm"
fmt_W2 = "商談資料.pptx"
Address = "C:\商談資料"
manual = "マニュアル"
data1 = "計算シート"
'画面描写非表示
Application.ScreenUpdating = False
'マニュアルページを表示
Sheets(manual).Select
'ループ処理
Dim i As Integer
i = 9
time = Sheets(data1).Cells(7, 2).Value '会社名を貼り付け Do While Cells(i, 1).Value <> ""
Filename = Cells(i, 1).Value
Cells(i, 1).Copy
Sheets(data1).Cells(1, 3).PasteSpecial xlPasteValues
'再計算後10秒待機 Application.Calculate Application.Wait Now() + TimeValue("00:00:10") DoEvents 'PPTのファイル名を設定 NewName = Address & "作成データ\【" & Filename & "】商談資料" & time 'PPTを開く Dim ppApp As New PowerPoint.Application ppApp.Visible = True Dim ppPrs As PowerPoint.Presentation 'プレゼンテーションオブジェクト Set ppPrs = ppApp.Presentations.Open(Address & fmt_W2) Application.Wait Now() + TimeValue("00:00:10") 'PPTを名前を付けて保存 ppPrs.SaveAs (NewName) 'PPTを閉じる ppApp.Quit Set ppApp = Nothing ppPrs.Close '完了した会社名の右セルにCompleteを入れる Cells(i, 3).Value = "Complete" i = i + 1 Loop
End Sub
試したこと
PowerPointのリンクの更新をさせるために、 「'PPTを開く」部分を下記にしてみたが上手くいかなかった。
Dim Pwp As Object
Dim ppPrs As Object
Dim sh, sld
Set Pwp = CreateObject("PowerPoint.Application")
Set ppPrs = Pwp.Presentations.Open(Address & fmt_W2)
For Each sld In Prs.Slides
For Each sh In sld.Shapes
If sh.Type = msoLinkedOLEObject Then
sh.LinkFormat.Update
End If
Next
Next
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。