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

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

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

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

Q&A

解決済

1回答

3746閲覧

ExcelVBA 既に開かれているPowerPointは閉じずにマクロ処理で開いたPowerPointファイルのみをPDF変換して閉じたい

alma0925

総合スコア15

VBA

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

0グッド

0クリップ

投稿2021/12/20 02:49

以前こちらで質問した件に関連して更に解決できない問題があるので質問します。
ExcelVBAで指定したフォルダ内にある複数のPowerPointを開き、スライド1ページ目の指定の文字列の値を取得した後にPDF変換をして保存をループする処理を作成しています。
コード文は別のプロシージャでフォルダ名、パス名、ファイル名を取得してループしています。

なるべく処理は画面に表示させたくなく非表示で行っています(前回この非表示ができず質問して解決できました。)

しかし今回処理を実行する前に、別のPowerPointファイルを開いていた場合、そのファイルも閉じられてしまうので、そのファイルは閉じずに、マクロで処理した(フォルダ内の)ファイルのみをPDF変換した後に閉じたいのですが処理の書き方がわかりません。

Excelから開くブックに対しての処理は調べるとあるのですが、PointPointの処理があまり参考になるものがなく、とあるサイトでGetObjectでPowerPointが起動してるか判定できそうだったので試しに記述していましたがデバッグ処理で「AcriveXコンポーネントはオブジェクトを作成できません」とエラーメッセージが表示されます。

参照設定で[Microsoft PowerPoint16.0 Object Library]にはチェックをしています。

何か良い方法がありましたら教えていただきたいです。

'**************************************************************** ' Convert_PDF_PowerPoint '   1フォルダにあるPowerPointファイルから報告書Noを取得しPowerPointに変換 '  CreateDate :2021/11/30 HIROKO.TODA ' 引数:PP_PathName…01フォルダパス ' 引数:SaveFilePath…02フォルダパス ' 引数:FlgConvPP…PDF変換完了フラグ '**************************************************************** Public Function Convert_PDF_PowerPoint(ByVal PP_PathName, SaveFilePath As String, ByRef FlgConvPP As Boolean) As String Dim ppApp As Object 'PowerPoint.Application Dim ppPre As Object 'PowerPoint.Presentation Dim ppShp As Object 'PowerPoint.Shape Dim ppSld As Object 'PowerPoint.Slide Dim ppText As String 'PowerPoint.Text Dim MustBreak As Boolean Dim intSearch As Integer '検索結果返り値 Dim intReportNoS As Integer Dim strReportNo As String '======試しにGetObjectでオブジェクトを取得しようとしましたがエラーになる====== Dim PptFile As Object Set PptFile = GetObject(, "Powerpoint.Application")※※エラーメッセージ表示 If PptFile Is Nothing Then Debug.Print PptFile End If '======================================================================== Application.ScreenUpdating = False Set ppApp = CreateObject("PowerPoint.Application") 'PowerPointを起動してスライド1ページ目の中の全てのShapeについてテキストがあればセルに出力する Set ppPre = ppApp.Presentations.Open(FileName:=PP_PathName, WithWindow:=MsoTriState.msoFalse) '1ページ目のスライドを取得 Set ppSld = ppPre.Slides(1) '1ページ目のスライド内のShape分処理を繰り返す For Each ppShp In ppSld.Shapes If ppShp.HasTextFrame Then 'Shapeの形式がTextBoxの場合 ppText = ppShp.TextFrame.TextRange.Text 'TextBoxの値を取得 intSearch = InStr(ppText, ReportTitle) 'TextBoxから"報告書No."の開始位置を取得 If intSearch >= 1 Then '"報告書No."が含まれている場合(1以上の場合) intReportNoS = intSearch + 6 '報告書Noの取得開始位置を設定 strReportNo = Mid(ppText, intReportNoS, 11) '報告書Noを取得(取得したテキストの取得開始位置から11文字取得) Convert_PDF_PowerPoint = strReportNo '関数の戻り値に報告書Noを返す MustBreak = True '取得フラグをTrueにする End If If MustBreak Then Exit For '報告書Noを取得した場合は繰り返し処理を抜ける End If Next 'PDF形式でファイルを保存する With ppPre .SaveAs FileName:=SaveFilePath, FileFormat:=32 End With 'Presentationを閉じる ppPre.Close 'オブジェクトを閉じる ppApp.Quit 'PDF変換完了フラグをTrueにする FlgConvPP = True 'オブジェクトの開放 Set ppShp = Nothing Set ppSld = Nothing Set ppPre = Nothing Set ppApp = Nothing Application.ScreenUpdating = True End Function

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

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

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

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

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

guest

回答1

0

ベストアンサー

ppApp.Quit をなくしたらどうでしょう。

投稿2021/12/20 03:59

jinoji

総合スコア4592

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

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

alma0925

2021/12/20 04:26

解決できました。こんな簡単な事だったとは。。。コピペするだけでコードをきちんと理解しないといけないですね。 ありがとうございました!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問