電子メールをWordファイルとしてマクロに保存し、Wordで変換したPDFファイルに置き換えます。変換部分は正常に動作しています - 問題は、元の.docファイルを削除しようとしたときです。ファイルを閉じた直後にファイルを削除する - 「Permission Denied」エラー
Dim objWrd As Object
Dim objWrdDoc As Object
Dim wrdCurrentPrinter As String
Set objWrd = CreateObject("Word.Application")
Set objWrdDoc = objWrd.Documents.Open(filePath & fileName)
''Print' file as PDF - current printer is stored so it can be reverted back afterwards
wrdCurrentPrinter = objWrd.ActivePrinter
objWrd.ActivePrinter = "Microsoft Print To PDF"
'File name is specified here to avoid Save As prompt. PrintToFile property is 'True'
objWrd.PrintOut , , , filePath & Replace(fileName, ".doc", ".pdf"), , , , , , , True
objWrd.ActivePrinter = wrdCurrentPrinter
objWrd.Quit
Set objWrd = Nothing
Kill filePath & fileName
Kill filePath & fileName
私はエラー70 - 許可が拒否されます。
ファイルを手動で削除することはできますが、ブレークポイントを追加して 'Kill'行をステップ実行すると、Wordの終了とKillコマンドの間にわずかな遅延があっても機能します。したがって、コードが非常に速く処理されているため、コマンド実行時にファイルが開かれている可能性があります。
私はOutlookで問題を抱えている遅延を作成するルートを下げる必要があると感じています。これは可能性の高い解決策ですか、私が見逃したことがありますか?
企業ネットワーク内のサーバーで作業することはありますか?クローズ後にファイルがロックされている時間が変わる可能性があるので、 'objWrdDoc.Documents.Count = 0'をチェックするハンドラを追加することができます。そうでなければ' sleep'ではなく一定時間ループします。 –
私がマーシャルしなければ、私はいつも問題を抱えてきました。変数を変更して機能させる必要がありますが、ここでは私のinterop関数の "finally"ブロックの例を示します:[Begin Block] oBook.Close(False) oApp.Quit() マーシャル.ReleaseComObject(oRange) Marshal.ReleaseComObject(oSheet) Marshal.ReleaseComObject(oBook) Marshal.ReleaseComObject(oBooks) Marshal.FinalReleaseComObject(oApp)[終了ブロック]。私はそこから始めて、それが正しいかどうかを見ます。そして、私はちょうどそれがvbaタグであることを見ました - 役に立たない場合は申し訳ありません – Aaron
あなたはF8でそれを踏んでコードをテストする必要があります。速すぎるファイルにアクセスしようとすると問題が発生した場合に表示されます。私は一度だけ読み込み専用ファイルを削除することに問題があるので、それが殺人の前にこれを使うと、 'GetAttr(filePath&fileName)And vbReadOnly Then SetAttr(filePath&fileName)、vbNormal' –