以前こちらで質問した件に関連して更に解決できない問題があるので質問します。
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
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/12/20 04:26