ネットで利用できるコードを参考にして、
ExcelVBAで複数のPowerPointのファイルを開き、各ファイルのスライド1ページ目のテキストに該当するデータがあったら値を取得し、その後にPowerPointファイルをPDF変換して保存をし、PowerPointも閉じるという処理を書いています。Fucntion関数のため外でループを回しています。
今の処理はPowePoint自体は起動して中のファイルは表示されない(スライドなど表示されず中身のない状態)でPDF変換のため発行中というメッセージが複数回表示されます。
処理中にPowerPoint自体が起動するのはいいのですができれば画面に表示させたくなく、希望としては起動しても最小化するようにしたいです(発行中のメッセージのせいで表示されるのであればメッセージも表示させたくない)
デバッグして動きを見ていると Set ppApp = CreateObject("PowerPoint.Application")
ppApp.Visible = Trueの時点でPowerPoint自体が起動して表示されたので、一度ppApp.Visible = Falseを試みたらデバッグエラーになったのでTrueにしなければいけないとは思うのですが(知識不足ですみません)その後に最小化するという書き方が分かりません。
アドバイスよろしくお願いいたします。
Public Function Convert_PDF_PowerPoint(ByVal PP_PathName, SaveFilePath As String) 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 '検索結果返り値 Application.ScreenUpdating = True Set ppApp = CreateObject("PowerPoint.Application") ppApp.Visible = True '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) Debug.Print intSearch If intSearch = 1 Then '値に"報告書No."が含まれている場合 Convert_PDF_PowerPoint = Mid(ppText, InStr(ppText, ReportTitle) + Len(ReportTitle)) '関数の戻り値に報告書Noを返す MustBreak = True End If If MustBreak Then Exit For '繰り返し処理を抜ける End If Next 'PDF形式でファイルを保存する With ppPre .SaveAs FileName:=SaveFilePath, FileFormat:=32 End With 'Presentationを閉じる ppPre.Close 'オブジェクトを閉じる ppApp.Quit 'オブジェクトの開放 Set ppShp = Nothing Set ppSld = Nothing Set ppPre = Nothing Set ppApp = Nothing Application.ScreenUpdating = True End Function
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。