ネットワークドライブへのPDFファイル連続保存について
2026-08-21 13:29
「シートを以下にPDFファイルとして保存する」アクションで「指定パスを使用する」を選択し、ファイル名を変更しながら繰り返し保存したところ、まれに保存処理が失敗し、PDFファイルが作成されずアクションが中断されることがあります。
エラーログ
・「PermissionDeniedFileException:指定したファイルのアクセスが拒否されました。」の表示後アクションが中断。
・「出力ファイルのチェックで予期せぬエラーが発生しました: error-code = 0x00000002」の表示後アクションが中断。
また、エラーが表示されずにアクションが最後まで終了して、保存先ファイルを確認するとPDFファイルが出力予定数より少ない状態で処理が終了する場合もありました。
PDFの保存先にはネットワークドライブを指定しています。
以下の条件を検証しました。
・保存先をローカルディスクへ変更
→正常に連続保存されました。
・同じ繰り返し処理で、PDF保存アクションを「シートを以下にExcelファイルとして保存する」アクションへ変更し、ネットワークドライブへ保存
→正常に連続保存されました。
・保存先をドライブレターではなくUNCパスへ変更
→ 改善しませんでした。
また、ネットワークドライブへのPDF保存中にエクスプローラーで保存先を確認したところ、作成されたPDFファイルが一瞬消えた後、同じファイルが再度表示される不安定な挙動が確認できました。
この挙動は、ローカルディスクへのPDF保存、およびネットワークドライブへのExcelファイル保存では確認されませんでした。
似たような現象が発生した方はいらっしゃいますか?解決策を知りたいです。
よろしくお願いいたします。
回答を投稿するにはログインが必要です。
以下の例は、Powershellスクリプトになりますが、 このスクリプトを実行すれば、
(実行中には)C:\WORK フォルダ内に、ファイルが保存された場合、 S:\OtherWork フォルダに移動するようなサンプルコードになります。
※ 以下コンテンツは ファイル(ファイル名は任意ですが、拡張子は .ps1 )に保存してから実行してください。
$watchFolder = "C:\WORK"
$destinationFolder = "S:\OtherWork"
# --- フォルダの存在チェック ---
$missingFolders = @()
if (-not (Test-Path $watchFolder)) { $missingFolders += "・監視元フォルダ ($watchFolder)" }
if (-not (Test-Path $destinationFolder)) { $missingFolders += "・移動先フォルダ ($destinationFolder)" }
# 【フォルダがない場合】警告を出して終了
if ($missingFolders.Count -gt 0) {
Write-Host "==========================================" -ForegroundColor Yellow
Write-Host "【警告】必要なフォルダが見つかりません!" -ForegroundColor Yellow
Write-Host "==========================================" -ForegroundColor Yellow
foreach ($folder in $missingFolders) {
Write-Host $folder -ForegroundColor White
}
Write-Host ""
Write-Host "フォルダを作成してから、再度実行してください。" -ForegroundColor Gray
Write-Host "何かキーを押すと画面を閉じます..." -ForegroundColor Gray
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
Exit
}
# 【フォルダを発見した場合】フォルダ名を表示
Write-Host "==========================================" -ForegroundColor Cyan
Write-Host "【確認】対象フォルダを発見しました。" -ForegroundColor Cyan
Write-Host "==========================================" -ForegroundColor Cyan
Write-Host "・コピー元フォルダ : $watchFolder" -ForegroundColor White
Write-Host "・コピー先フォルダ : $destinationFolder" -ForegroundColor White
Write-Host ""
Start-Sleep -Seconds 2 # 確認用に2秒間表示
# ------------------------------
$filter = "*.*"
$fsw = New-Object System.IO.FileSystemWatcher
$fsw.Path = $watchFolder
$fsw.Filter = $filter
$fsw.IncludeSubdirectories = $false
$fsw.EnableRaisingEvents = $true
$action = {
$path = $Event.SourceEventArgs.FullPath
# ファイルが完全に書き込まれるまでわずかに待機
Start-Sleep -Milliseconds 500
if (Test-Path $path) {
try {
Move-Item -Path $path -Destination $destinationFolder -Force -ErrorAction Stop
Write-Host "Moved: $path to $destinationFolder"
} catch {
# ファイルがロックされている場合はスキップ
}
}
}
# 追加(Created)と更新(Changed)を監視
Register-ObjectEvent $fsw Created -Action $action | Out-Null
Register-ObjectEvent $fsw Changed -Action $action | Out-Null
Write-Host "==========================================" -ForegroundColor Green
Write-Host " フォルダの監視を開始しました(正常動作中)" -ForegroundColor Green
Write-Host "==========================================" -ForegroundColor Green
Write-Host "※この画面を閉じると監視を終了します..." -ForegroundColor Gray
while ($true) { Start-Sleep -Seconds 1 }
ローカル経由での保存、大変参考になりました。
ただ、今回の対応では、可能であればRPA拡張オプションを利用せずに実現したいと考えております。
お手数をおかけしますが、よろしくお願いいたします。
