Excel VBAで業務記録を自動保存している場合、ブックを開いた際に「一部の内容に問題が見つかりました。可能な限り内容を回復しますか?」という修復メッセージが表示されることがあります。その後、修復されたファイルを編集して保存しようとすると、ActiveWorkbook.Saveでエラーが発生するケースがあります。
この記事では、Excelが修復モードで開いたブックをVBAから保存できない原因や、エラーを回避するための安全な保存方法、業務利用でトラブルを減らす対策について解説します。
Excelの修復後にActiveWorkbook.Saveでエラーが発生する理由
Excelで「内容に問題が見つかりました。可能な限り内容を回復しますか?」という表示が出る場合、ファイル内部の構造やデータの一部に破損や不整合が発生しています。
「はい」を選択するとExcelは可能な範囲でデータを復元しますが、この時点で元のファイルと完全に同じ状態ではありません。Excel内部では修復済みの一時的な状態として扱われることがあります。
そのため、通常の操作では編集や保存ができても、VBAのActiveWorkbook.Saveでは内部状態の違いによってエラーが発生する場合があります。
ActiveWorkbook.Saveを使う場合の注意点
ActiveWorkbook.Saveは、現在アクティブになっているブックを上書き保存する命令です。
例えば以下のようなコードの場合、開いているブックをそのまま保存します。
Sub 保存処理()
ActiveWorkbook.Save
End Sub
しかし、修復されたブックではExcelが内部的に保持しているファイル情報と保存先の情報が一致しないことがあり、保存処理で失敗することがあります。
また、ActiveWorkbookはユーザー操作や別ファイルの表示によって対象が変わる可能性があります。業務用マクロでは、ThisWorkbookを使用する方が安全な場合があります。
修復されたExcelファイルを保存する回避方法
修復後のブックを保存する場合は、単純な上書き保存ではなく、別名保存を行う方法が有効です。
例えば、以下のようにSaveAsを利用します。
Sub 修復後保存()
Dim 保存先 As String
保存先 = ThisWorkbook.Path & “\修復後_” & ThisWorkbook.Name
ThisWorkbook.SaveAs 保存先
End Sub
別ファイルとして保存することで、Excelが修復した内容を新しい正常なファイルとして作成できます。
特に業務記録用のExcelでは、元ファイルを残した状態で修復後ファイルを作成する方が、万が一問題が発生した場合にも復旧しやすくなります。
VBAで保存前にエラーを回避する処理を入れる方法
業務で利用するマクロの場合、保存処理の前にエラー処理を追加しておくと、突然処理が停止することを防げます。
例えば以下のように記述できます。
Sub 安全保存()
On Error GoTo エラー処理
ThisWorkbook.Save
Exit Sub
エラー処理:
MsgBox “保存できませんでした。別名保存を実行してください。”
End Sub
このようにしておけば、保存に失敗した場合でも利用者へ対処方法を知らせることができます。
Excelファイル破損を防ぐための業務上の対策
今回のような問題は、ネットワーク上のExcelファイルを直接開いている場合に発生しやすくなります。
特にWi-Fi環境で共有フォルダー上のExcelファイルを編集している場合、保存中に通信が途切れるとファイル内部が破損する可能性があります。
例えば、複数人が同じExcelファイルを利用する場合は、以下のような対策が有効です。
- 作業前にローカルへコピーして編集する
- 定期的にバックアップを作成する
- 保存中にパソコンやネットワークを切断しない
- Excelファイルを共有する場合はOneDriveやSharePointなど適切な環境を利用する
修復メッセージが頻繁に出る場合の確認ポイント
毎回ファイル修復が発生する場合は、単なる一時的な問題ではなくファイル自体に問題がある可能性があります。
確認するポイントとして、不要なマクロや壊れた図形、過剰なデータ量、古いExcel形式(xls形式)の利用などがあります。
また、ファイルを新規ブックへコピーして作り直すことで、内部の不具合が解消される場合もあります。
まとめ|修復されたExcelブックは上書き保存より別名保存が安全
Excelで「内容を回復しますか?」と表示された後にActiveWorkbook.Saveでエラーが出る場合、修復処理によってファイル内部の状態が通常とは異なっていることが原因の可能性があります。
対策としては、修復後のファイルを別名保存する、ThisWorkbookを利用する、保存処理にエラー対策を追加する方法が有効です。
また、Wi-Fi経由の共有ファイル編集では破損リスクがあるため、バックアップや保存環境の見直しも重要です。業務で使うExcel VBAほど、エラー発生時でもデータを失わない仕組みを作っておくことが大切です。


コメント