プロが教える店舗&オフィスのセキュリティ対策術

お知恵を貸してください!

ExcelシートをPDF出力する、というマクロを作成しました。

通常は問題なく動くのですが、PDFの出し直しをしようとすると、同じPDFファイルが開いてるときにエラーになってしまうので、実行時にPDFファイルが開いていたら閉じる、としたいのですが構文がわかりません。

もしくは、実行時にPDFファイルが開いていたらメッセージを表示してマクロを中止する、でも構いません。

作成されるPDFのファイル名はExcelと同じファイル名+任意の名前(yyyymmdd_【任意の名前】〇〇〇)になるので予め指定することはできません。



Office365
Excel2016
Adobe Acrobat Reader DC

VBAは初心者のため色々調べましたが難しくてわかりませんでした。
解決出来る構文と、必要な参照設定など、よろしくお願いします!

A 回答 (2件)

こんにちは



他のソフトの制御を行うのは、もともとのVBAの範囲を超えていると言えます。

>VBAは初心者のため色々調べましたが難しくてわかりませんでした。
>解決出来る構文と、必要な参照設定など、よろしくお願いします!
多分、調べたところに例示されている構文ででできるはずと思います。
(何を調べたのかは知りませんけれど・・・)
理解できないようであれば、この方法はあきらめた方が賢明かと思います。

>作成されるPDFのファイル名は~~予め指定することはできません。
マクロから出力しているのでしょうから、名前がわからないってことはないはずと思いますけれど??
名前が不明だとウィンドウの特定ができないので、PDFのウィンドウを盲滅法に閉じて回るしか方法はありません。


>同じPDFファイルが開いてるときにエラーになってしまうので
>メッセージを表示してマクロを中止する、でも構いません。
こちらであれば、通常のマクロの範囲で処理できるでしょう。
On Error ステートメントでエラーを抽出し、Errオブジェクトを調べることでエラーの内容がわかりますので、処理を分ければよろしいでしょう。
https://docs.microsoft.com/ja-jp/office/vba/lang …
https://docs.microsoft.com/ja-jp/office/vba/lang …

まったく別の方法になりますが、PDF出力時に「PDFを開かない」設定にしておくのが一番簡単な解決方法ではないかと思います。
PDFの「印刷設定」で、「結果のAdobe PDFを表示」のチェックをはずすだけで済みますので。
    • good
    • 0
この回答へのお礼

解決しました

PDFの制御が難しいということすらわかっていなかったのでありがとうございました。
on error gotoで解決させることになりましたのでベストアンサーに選ばせて頂きました。
ご丁寧にありがとうございました。

お礼日時:2021/01/29 18:03

以前、VBスクリプトでこの手法を利用していたのを思い出しました。


EXCEL VBAのご質問ですが、WORDのVBAを呼んで、Acrobatのタスクを閉じてしまうという、「EXCELのVABじゃない! 」「邪道だ!」といわれそうな手法です。

Sub adobe_kill()
Dim Wdapp As Object
Dim task As Object
Dim Flag As Integer
Set Wdapp = CreateObject("Word.Application")
Flag = 0
For Each task In Wdapp.Tasks
If task.Visible = True And InStr(task.Name, "Adobe Acrobat Reader DC") > 0 Then
Flag = 1
If MsgBox(task.Name & vbCrLf & "を終了させますか?", 36) = vbYes Then
task.Close
End If
End If
Next
If Flag = 0 Then MsgBox ("Adobe Acrobat Readerは起動していません")
Wdapp.Quit
Set Wdapp = Nothing
End Sub

上記のVBAサブルーチンを現在利用中のVBAに組み込んでおお使いください。
    • good
    • 0
この回答へのお礼

ありがとう

ソースまで書いてくださりありがとうございました!
今回はONERROR GOTOで解決することになりました。

PDFの制御が難しいということだったので、それでも実行できるソースは大変参考になります!
ありがとうございます!

今回は使わなかったものの試してみたのですが「別のプログラムでのOLEの操作が完了するまで待機します。」と出てしまい直ぐに解決出来なさそうだったので時間が出来た時に改めて色々試してみようと思います。

とても勉強になりました。
ご丁寧にどうもありがとうございました!

お礼日時:2021/01/29 18:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング