読み取り専用ファイルを上書き保存するには?
作業中は常に読み取り専用状態にしておき、保存の時にだけ読み取り専用の属性を解除して
上書き保存し、上書き保存が終了次第、即座に読み取り専用状態に戻す運用を考えております。
(1)ThisWorkbookのOpenプロシージャでファイルを読み取り専用状態に設定
(2)ThisWorkbookのBeforeSaveプロシージャで
読み取り専用を解除→上書き保存→読み取り専用状態に再設定
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'上書き保存モードを解除
Cancel = True
'上書きしますか?のコメントを非表示に設定
ActiveWorkbook.Saved = True
'ファイルが読み取り専用であった場合は以下の処理を実行
If ActiveWorkbook.ReadOnly Then
'ブックの読み取り専用設定を解除
ActiveWorkbook.ChangeFileAccess Mode:=xlReadWrite, Notify:=True
'上書き保存を実行
Application.DisplayAlerts = False
Application.EnableEvents = False
ActiveWorkbook.Save
Application.EnableEvents = True
Application.DisplayAlerts = True
'ブックを読み取り専用に設定
ActiveWorkbook.ChangeFileAccess Mode:=xlReadOnly
'ファイルが読み取り専用でなかった場合は以下の処理を実行
Else
'上書き保存を実行
Application.DisplayAlerts = False
Application.EnableEvents = False
ActiveWorkbook.Save
Application.EnableEvents = True
Application.DisplayAlerts = True
End If
End Sub
上記のマクロで上手くいきそうなのですが、下記2点が解決できずに困っております。
(1)上書き保存ボタンをクリックすると下記のメッセージが毎回表示されてしまいます。
『読み取り専用です。コピーを保存するには名前を付けて保存して下さい。』
OKボタンをクリックしたりEscやEnterキーを押下さえすればこの警告メッセージを回避でき
以後は思った通りの処理を行えるのですが、できればこのメッセージを表示したくない。
(2)上書き保存のために読み取り専用を解除した際、他のオペレーターがエクセル起動中、
または上書き保存中であった場合、エラーが発生してしまうことと思われます。
この問題の解決策をご存知の方、是非教えて下さいますよう宜しくお願いします。
当初は共有ブックとしての運用の方向で進めていたのですが、既に2人のオペレーターが
ファイルにアクセスしている状態で、3人目のオペレーターがファイルを開くと読み取り専用と
なってしまったり、保存時に時間がかかり過ぎたり、保存時のエラーが頻繁に発生したりといった
状況でしたので共有ブックとしての運用は諦めました。(シート50枚、ファイルサイズ3.5MB程度)
使用PCはXPでExcel2003です。以上、宜しくお願いします。
お礼
迅速なご回答ありがとうございます! そうでしたか・・・これからは必ず確認をしたいと思います。 願わくば、自分は打ち直してもよいから相手のデータが残っていますように!