読み取り専用ファイルの上書き保存方法と注意点

このQ&Aのポイント
  • ファイルを上書き保存するためには、読み取り専用属性を解除する必要があります。
  • 上書き保存を行う際に注意が必要な点として、他のオペレーターがエクセルを利用中である場合にエラーが発生する可能性があります。
  • 共有ブックとしての運用を諦め、個別に読み取り専用状態を管理する方法を検討するべきです。また、ファイルサイズが大きくなると保存時にエラーが発生する可能性があるため、ファイルの分割やデータの圧縮を検討することも重要です。
回答を見る
  • ベストアンサー

読み取り専用ファイルを上書き保存するには?

作業中は常に読み取り専用状態にしておき、保存の時にだけ読み取り専用の属性を解除して 上書き保存し、上書き保存が終了次第、即座に読み取り専用状態に戻す運用を考えております。 (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です。以上、宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.3

>ただ、全てのオペレーターにアクセスのライセンスを取得させるのが簡単な状況でないため、 >アクセスの活用ができない状況にあります エクセルからアクセスのテーブルの操作が可能です。 すべてのユーザーにアクセスのライセンスがなくても運用できる可能性もあります。 例えば 1台のパソコンにアクセスが入っているとして データベースの作成、テーブルの作成など行って、共有できるサーバーのフォルダにデータベースの ファイルを作成しておきます。 ほかのユーザーは、エクセルを使って データを追加したり、検索やデータの抽出を行う作業専門に します。 データベースの操作は 大まかに 1、データの検索・抽出 2、データの追加 3、データの修正 4、データの削除 に分けられますが。 エクセルからアクセスのテーブルの内容を修正したり削除したりする時だけは運用に注意してください。 集計したいデータをエクセルで抽出、エクセルで内容を書き換えた後にアクセスのテーブルに反映させる といった手順ですが。 仮に Aさんがあるレコードのデータを修正したいと思ってエクセルに取り出して作業中に Bさんも同じレコードに修正の作業に入ってしまった。Bさんが先に作業を終えてアクセスのテーブルに 保存。 その後に、Aさんが作業を終わってアクセスのレコードを上書きして、Bさんの作業内容が消える という可能性です。 そのあたりを工夫すればいかがでしょうか?

excuse-me
質問者

お礼

お礼が遅くなってしまい、誠に申し訳ございませんでした。 また、貴重なご意見を頂きありがとうございました。 アクセスでの運用も視野に入れて今後の運用について 検討してみます。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

Excelの「変更履歴」機能というのがアル。 http://allabout.co.jp/gm/gc/297720/ これを読んで、使えないか考えてみては。 ーー 読み取り専用ファイル http://www.kenzo30.com/ex_kisopoint/onepoint_sonota5.htm  上書き保存ができないファイルです。 開いた跡でyp見tp理専用属性を返すことは出来ないでしょう。 上記に 上書きしたものを保存する時は、別のファイルとして新しい名前を付けて新規に保存します、と在るように そのようにする仕掛けを考えたらどうでしょう。 ーー 一般にエクセルは自分で使うソフトであり、機密や権限などの体系的な組み込みはなされていない(目指してない)ソフトです。 素人衆が、十分勉強もしないで、あれもこれもとか、なんでもエクセルとかの路線で色々質問も多いが、「木に縁りて魚を求む 」の類ではといつも思う。

excuse-me
質問者

お礼

ご回答ありがとうございます。確かにエクセルでの運用には無理がある状況です。 考え方を変えて今後の運用方法について再度 検討してみることにします。

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.1

質問に対する直接の回答ではありません。 >既に2人のオペレーターが >ファイルにアクセスしている状態で、3人目のオペレーターがファイルを開くと読み取り専用と >なってしまったり、保存時に時間がかかり過ぎたり、保存時のエラーが頻繁に発生したりといった >状況でしたので共有ブックとしての運用は諦めました。(シート50枚、ファイルサイズ3.5MB程度) 複数のユーザーから同時編集が必要になった時点でエクセルファイルでのデータ管理はあきらめましょう。 元々エクセルはスタンドアロンの上に使われるアプリケーションです。 複数のユーザーからデータの編集を行うのならばアクセスなどデータベースの活用に考え方を変えるべきです。 ファイルを開くときに 通知 を設定するなどで解決方法があるかもしれませんが 仮に エクセルファイルを上書き保存できたとして、先にほかのユーザーが編集した内容の上に上書き保存してしまったらどうでしょうか? シート50枚というのも使いにくくないですか。

excuse-me
質問者

お礼

早速のご回答、ありがとうございました。今後の運用について検討をしてみます。 ただ、全てのオペレーターにアクセスのライセンスを取得させるのが簡単な状況でないため、 アクセスの活用ができない状況にあります。あと、よく考えてみたのですが、この方法では 上書き保存した際に漏れが生じてしまうのですね・・・。参考になりました。

関連するQ&A

  • SaveAsの保存先について

    エクセルのマクロのついての質問です よろしくお願いします 現在、下記のようなコードでマクロを実行するとパスワードをつけて上書き保存したような結果になっています(元のファイル名も○○.xlsで、指定したものと同一です) Application.DisplayAlerts = False ActiveWorkbook.SaveAs Filename:="○○.xls", FileFormat:=xlNormal, Password:="1111", WriteResPassword:="2222", ReadOnlyRecommended _ :=False, CreateBackup:=False Application.DisplayAlerts = True 私の目的としてはそれでよいのですが、このように格納先を指定しなかった場合は 必ず元のファイルと同一のフォルダになるってくれるものなのでしょうか? それとも状況によって別なところに名前をつけて保存されてしまったりすることがありますか?

  • エクセルで保存しますか?のメッセージを表示しない

    皆さんこんにちは 教えてください、読み取り専用でエクセルファイルを開いて閉じるボタンを使って閉じるときに「保存しますか?」のメッセージを出さないで閉じたいのですが、Workbook_BeforeClose イベントに Application.DisplayAlerts = False としてもメッセージは表示されます 読み取り専用で開いているにもかかわらず Application.DisplayAlerts = False ThisWorkbook.Save Application.DisplayAlerts = True とすれば メッセージが表示されずに閉じますが 保存しますか?→いいえ として閉じるよりも時間がかかります 読み取り専用で開いているのに保存されるのでしょうか?同じファイルを再び開くと変更した部分は保存されていません しかし、タイムスタンプは閉じた時間に更新されています これは普通なのでしょうか? この方法以外で保存しますか?のメッセージを出さないで保存しないで閉じる方法はないでしょうか?よろしく御願いします

  • EXECLの変更を保存せずにブック強制的に閉じる方法を

    困り果てています VISTAとXPでマクロで EXECLの変更を保存せずにブック強制的に閉じる方法を 教えていただきたいのですがテストをしてみたマクロは 下記のようなものですがですがうまく動作しません シートの中にスピンボタンがありセルの中の数字を 変えると変更を保存しますか? となります。 Sub Auto_Close() ThisWorkbook.Saved = True End Sub Sub 例1434()   ActiveWorkbook.Saved = True ActiveWorkbook.Close End Sub Sub 13() ThisWorkbook.Close SaveChanges:=False End Sub Sub CloseBook() Application.DisplayAlerts = False ActiveWorkbook.Close Application.DisplayAlerts = True End Sub Sub CloseBook2() ActiveWorkbook.Close savechanges:=False End Sub いずれもだめでした 良い方法をお教えください。

  • [読み取り専用]の設定

    EXCEL2000を利用しています。 フォルダにあるブックに[読み取り専用]の設定をかけたいと考えています。 いちいち次のような操作で[読み取り専用]の設定をするのが大変なので、VBAで実現したいと考えています。 --------次のような操作----------------------------------------------------------------------------------- 1.[エクスプローラ] ウィンドウで、必要なファイルが保存されているドライブまたはフォルダを開きます。 2.[ファイル] メニューの [プロパティ] をクリックします。 3.[ファイルの情報] タブで、[読み取り専用] チェック ボックスをオンにします。 ----------------------------------------------------------------------------------------------------------------- 上記の操作による[読み取り専用]の設定をVBAで書くためには、どのように記述すればよいでしょうか? 「ActiveWorkbook.ChangeFileAccess Mode:=xlReadOnly 'ブックを読み取り専用に設定する」を記述すると、保存できませんし、「ReadOnlyRecommended:=True」だとセキュリティーが甘くなります。 アドバイスをどうぞよろしくお願いいたします。

  • EXECLの変更を保存せずにブック強制的に閉じる方法を

    困り果てています VISTAとXPでマクロで EXECLの変更を保存せずにブック強制的に閉じる方法を 教えていただきたいのですがテストをしてみたマクロは 下記のようなものですがですがうまく動作しません シートの中にスピンボタンがありセルの中の数字を 変えると変更を保存しますか? となります。 Sub Auto_Close() ThisWorkbook.Saved = True End Sub Sub 例1434()   ActiveWorkbook.Saved = True ActiveWorkbook.Close End Sub Sub 13() ThisWorkbook.Close SaveChanges:=False End Sub Sub CloseBook() Application.DisplayAlerts = False ActiveWorkbook.Close Application.DisplayAlerts = True End Sub Sub CloseBook2() ActiveWorkbook.Close savechanges:=False End Sub いずれもだめでした 良い方法をお教えください。

  • xlsmとxlsのマクロについて

    こんにちは 今まで動いていたxlsのマクロをxlsmに バージョンアップさせたところ不具合が起きましたので質問させていただきます。 ファイルの概要(すべてマクロによる処理) (1) ファイルを開いたときに,読み取り専用で開く   ActiveWorkbook.ChangeFileAccess Mode:=xlReadOnly (2) シートの特定の箇所を変更 (3) 読み取り専用を解除し上書き保存   ActiveWorkbook.ChangeFileAccess Mode:=xlReadWrite   ActiveWorkbook.Save xlsmのファイルでは読み取り専用を解除すると, 変更されたファイルというボックスが表示されます。 'ファイル名'を変更しました。 別の人も変更を加えました。どのように処理しますか。 破棄 保存 キャンセル どのようにマクロを設定すればこのボックスを表示せず, 上書き保存をすることができますでしょうか。 よろしくお願いします。

  • Excelマクロ テキスト出力すると上書きが不可

    http://okwave.jp/qa/q2607598.html を参考にExcelのマクロでシートのデータをテキストファイルに出力できました。 Excelは2003、OSはXPです。 しかし、その後はExcelやVisual Basic Editorを上書き保存できなくなり、 更には出力したテキストファイルも削除できなくなってしまいました。 一度Excelを閉じて再度開けば問題は解消するのですが、 どうにかして回避できないものでしょうか? エラー文は 上書き保存の時が、 「選択したファイルの種類は複数のシートを含むブックをサポートしていません。」 OKを選択すると次のエラーが出ます。 「あいうえお.txtには、テキスト(タブ区切り)と互換性の無い機能が含まれている可能性があります。この形式でブックを保存しますか?」 テキストを削除する時は 「あいうえお を削除できません。ファイルは次のプログラムによって使用されています: Microsoft Office Excel 続行する前にファイルを閉じてください。」 使ったコードは以下の感じです。 Application.DisplayAlerts = False ActiveWorkbook.SaveAs Filename:="保存先フォルダ\下書き.txt", _ FileFormat:=xlCurrentPlatformText Application.DisplayAlerts = True ActiveSheet.Name = "Sheet2" ActiveWorkbook.Worksheets("Sheet1").Activate どうすれば回避できるでしょうか? ご教示していただけると助かります。 宜しくお願いします。

  • ファイルの保存場所を設定してしまう方法

    ファイルを保存する時に、保存先を指定できるマクロ(下記参照)があります。 保存場所あらかじめ設定するには、何を足せばいいのでしょうか? Sub NameSave() Application.EnableEvents = False Application.Dialogs(xlDialogSaveAs).Show arg1:=ファイル名 Application.EnableEvents = True End Sub vbaは初心者です。 エクセル2003を使っています。 ご存知の方、どうぞ教えてください。 よろしくお願いいたします。

  • VBA 新規作成したファイルを開くときにエラー

    すみません、助けてください。 Excel 2007のVBAでActiveWorkbook.SaveAsを使って 新規にExcelファイルを生成するものを作成しているのですが、 新たに作成したExcelファイルを開くときにエラー(警告)が出てしまいます。 (ファイル自体は開けるのですが。。。) ソースは以下です。 ------------------------------------------------------------ ' シート枚数を指定 Application.SheetsInNewWorkbook = 3 Workbooks.Add ' 上書き保存 Application.DisplayAlerts = False ' ファイル名を指定して保存 ActiveWorkbook.SaveAs (ThisWorkbook.Path + "\" + "新しいファイル.xls")

  • 上書き保存しかできないようにできますでしょうか

    何度もすみません、こちらで質問させていただいた者です。 http://okwave.jp/qa3987988.html ブックを保存するときに、絶対にファイル名を変えられないようにできますでしょうか。 上書き保存はできるけれども、名前を変えて保存はできないようなイメージです。 ブックを上書き保存するSaveメソッドを使って保存してからファイルを閉じるような マクロを実行させる感じかとも思ったのですが、ファイルメニューから 「名前を変えて保存」もできないようにしたいのです。 そんなことはできますでしょうか。

専門家に質問してみよう