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

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

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

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

Q&A

解決済

2回答

1700閲覧

ExcelVBAでのPowerPointファイル連続作成

kakikukecoin

総合スコア0

VBA

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

0グッド

0クリップ

投稿2021/10/07 13:44

編集2021/10/07 14:27

前提・実現したいこと

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/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答2

0

自己解決

PowerPointを開いた後、PowerPoint側VBEを開き、マクロ(リンクの更新はマクロ名)を呼び出し、リンク更新できました
ちなみに、Excel側で画面描写をFasleにすると上手くうごきません

Call SendKeys("%{F11}", True) 'VBEを開く
Call ppApp.Run("リンクの更新") ←Excel側に記載

以下、備忘録でPowerPoint側のマクロ

Public Function リンクの更新()
ActivePresentation.UpdateLinks 'リンクの更新
End Function

投稿2021/10/08 23:36

編集2021/10/08 23:55
kakikukecoin

総合スコア0

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

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

0

ppApp.Quit
Set ppApp = Nothing
をLoopの外に出したら、ファイル作成については解決しました。

②のリンク更新をどなたかお願いいたします。

投稿2021/10/08 00:26

kakikukecoin

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問