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

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

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

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

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

Q&A

0回答

3404閲覧

Killステートメントでファイルを消すことができない。

persimmon0330

総合スコア2

VBA

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

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

0グッド

0クリップ

投稿2022/02/10 21:07

編集2022/02/11 06:13

前提・実現したいこと

Acrobatのバックグラウンドプロセスが終了できない。
中間ファイルが削除できない。

発生している問題・エラーメッセージ

Kill PDF_TMP_WTM

実行時エラー'70'
書き込みできません。

となり中間ファイルが削除できません。

もちろん該当ファイルが開かれていないことは確認済みです

タスクマネージャーでみると、バックグラウンドプロセスとして'Acrobat.exe'が起動しており、手動でプロセスを終了すると動きます。

該当のソースコード

VBA

1Sub 自動透かし入れ_パスワード設定() 2 3 4 '元のコード入手先 5 'http://pdf-file.nnn2.com/?p=784] 6 7 'Acrobat Pro の返り値変数 8 Dim lRet As Long 9 10 'Acrobatプロセスの強制終了:事前 11 Call TerminateAcrobat 12 13 'Pdftkのバイナリの所在 14 Const PDFTK_PATH = "C:\Program Files (x86)\PDFtk\bin\pdftk.exe" 15 'Pdftkを使用するコマンドライン用の宣言 16 Dim WSH As Object, cmd As String, ret 17 18 19 '作業フォルダの指定 20 Dim directoryname As String 21 directoryname = Sheets("initial_setting").Cells(1, 2).Value 22 23 24 'ループ処理に必要な宣言 25 Dim rng As Range 26 Dim endrow As Long 27 Dim i As Long 28 Dim str_watermark, inputfilename, outputfilename As String 29 Dim str_owner_pw, str_user_pw As String 30 Dim PDF_IN, PDF_OUT, PDF_TMP_WTM As String 31 Dim allow_printing As Boolean 32 33 'listの最終行を取得 34 endrow = Sheets("list").Cells(1, 1).End(xlDown).Row 35 36 For i = 2 To endrow 37 With Sheets("list") 38 inputfilename = .Cells(i, 6).Value 39 outputfilename = .Cells(i, 7).Value 40 str_owner_pw = .Cells(i, 8).Value 41 str_user_pw = .Cells(i, 9).Value 42 allow_printing = .Cells(i, 10).Value 43 str_watermark = .Cells(i, 11).Value 44 End With 45 46 '元となるPDFファイル名 47 PDF_IN = directoryname & "input\" & inputfilename & ".pdf" 48 '出力PDFファイル名 49 PDF_OUT = directoryname & "output\" & outputfilename & ".pdf" 50 '中間ファイル名(後でファイルは削除する) 51 PDF_TMP_WTM = directoryname & "tmp1.pdf" 52 53 54 '透かしの文字列が空白の場合acrobat proで透かしを入れる工程をスキップする 55 If (str_watermark = "") Then 56 FileCopy PDF_IN, PDF_TMP_WTM 'PDF_TMP_WTMが次の工程にないと困るので作っておく 57 GoTo Acrobat_watermark_skip: 58 End If 59 60 'Acrobat Pro 操作に必要な宣言 61 Dim objAcroApp As New Acrobat.AcroApp 62 Dim objAcroPDDoc As New Acrobat.AcroPDDoc 63 Dim jso As Object 64 65 66 'JSObjectオブジェクト作成時のNothingの回避策 67 'Acrobatアプリを強制的にメモリにロードする 68 lRet = objAcroApp.CloseAllDocs 69 70 'PDFファイルを開く 71 lRet = objAcroPDDoc.Open(PDF_IN) 72 If lRet = False Then 73 MsgBox "AcroExch PDDoc Open エラー" 74 GoTo JSO_addWatermarkFromText_Skip: 75 End If 76 77 Set jso = objAcroPDDoc.GetJSObject 78 79 'PDF文書の指定のページに透かしを追加する 80 hogehoge~~ 81 82JSO_addWatermarkFromText_Skip: 83 84 'PDFを最適化して別名で保存する。 85 lRet = objAcroPDDoc.Save( _ 86 PDSaveFull + PDSaveLinearized + _ 87 PDSaveCollectGarbage, PDF_TMP_WTM) 88 89 90 'アプリケーションの終了 91 '開いているPDFドキュメントを全て閉じる 92 lRet = objAcroApp.CloseAllDocs 93 'アプリケーションの終了 94 lRet = objAcroApp.Hide 95 lRet = objAcroApp.Exit 96 'オブジェクトの強制開放 97 Set jso = Nothing 98 Set objAcroPDDoc = Nothing 99 Set objAcroApp = Nothing 100 101Acrobat_watermark_skip: 102 103 'PDFtkによる閲覧制限 104 hogehoge 105 106 '中間ファイル削除 107 Kill PDF_TMP_WTM 108 109 110nextfile_skip: 111 112 Next i 113 'ループここまで 114 115 Debug.Print "End: " & Date & " " & Time 116 117End Sub 118 119 120Private Sub TerminateAcrobat() 121 Dim items As Object 122 Dim item As Object 123 Set items = CreateObject("WbemScripting.SWbemLocator") _ 124 .ConnectServer.ExecQuery( _ 125 "Select * From Win32_Process " & _ 126 "Where Name = 'Acrobat.exe'") 127 If items.Count > 0 Then 128 For Each item In items 129 item.Terminate 130 Next 131 End If 132End Sub 133

試したこと

https://pdf-file.nnn2.com/?p=6
などを参照しました。

補足情報(FW/ツールのバージョンなど)

Adobe Acrobat 2017 使用

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

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

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

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

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

y_waiwai

2022/02/10 23:25

そもそも終了させなければならないもんなんでしょうか
persimmon0330

2022/02/11 06:11

for文で回しているので、新しく中間ファイルを作成する必要がある。 →tmp1.pdfが消せない。(実行時エラー'70'書き込みできません。)tmp1.pdfを開いていない。 →Acrobatのバックグラウンドプロセスを手動で終了させるとKillステートメントで消すことができる という感じなので、一番やりたいことはKillステートメントでファイルを消したい ということです。わかりづらくて申し訳ございません
enii

2022/02/12 17:19

ソースを見る限りはPDF_TMP_WTMを開いている箇所がないので、hogehogeの部分で加工しているんですよね? どうやって「開いていない」ことを検証したのか不明ですが、試しにhogehoge部分をすべてコメントアウトしてもKillできないんでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問