• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:自分のExcelを読み取り専用で開くVBAは?)

自分のExcelを読み取り専用で開くVBAは?

このQ&Aのポイント
  • Excelファイルを手動で開くとき、読み取り専用にする方法について質問です。
  • VBAを使用してExcelファイルを読み取り専用で開く方法を探しています。
  • ファイルのプロパティから「読み取り専用」にチェックを入れても、チェックが外れてしまい困っています。VBAで読み取り専用にする方法はありますか?

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

  • ベストアンサー
回答No.2

>Excelファイルを手動で開くとき、読み取り専用にするような方法はないでしょうか。 マクロが動いていることが前提です。 この元のマクロは、私自身の作ではありませんが、このような方法は使えませんでしょうか。 '// Private Sub Workbook_Open() Dim flg As Boolean With ThisWorkbook    If Not .ReadOnly Then      flg = .Saved      .Saved = True      .ChangeFileAccess xlReadOnly      .Saved = flg    End If  End With End Sub '//

goulden149
質問者

お礼

ご回答ありがとうございます。上記のコード、試してみました。 少し短くできるかと思って、以下も試してみました。 Private Sub Workbook_Open() ThisWorkbook.ChangeFileAccess Mode:=xlReadOnly End Sub すると、以下のメッセージが出ます。 「読み取り専用の切り替えを行う前に、編集内容を保存しますか?」 …ご提示のように、Savedプロパティの設定がポイントかと思いました。 上記だと丸ごと各ファイルに貼って回ってもよさそうですね! こちらを使わせていただこうと思います。 独断ですが、ベストアンサーとさせていただきます。ありがとうございました。

その他の回答 (1)

回答No.1

シートの中身を「書き換えさせたくない」のであれば、以下のようにします。 1.書き換えさせたくないセルを選択する。すべてであれば、全セルを選択する。 2.「書式」→「セル」→「保護」タブ→「ロック」にチェックを入れる→「OK」ボタン。 3.「ツール」→「保護」→「シートの保護」→「シートとロックされたセルを保護~」にチェックを入れる→「シートの保護を解除する為のパスワード」に、任意のパスワード文字列を入力する→「OK」ボタン。 4.上記1~3を、すべてのシートに対して行う。 5.「ファイル」→「上書き保存」で、ブック(ファイル)を上書き保存する。 これでオッケーです。xlsファイル(ブックファイル)を、読み取り専用にする必要はありません。 ファイルを開くと、カーソルの位置情報とかが更新されてしまい、閉じようとすると「Book1への変更を保存しますか?」と言うダイアログが出ますが「はい」を押しても「いいえ」を押しても、セルの中身は書き換え出来ません。 以下、蛇足ですが。 xlsファイルは、上記のように「ファイルを開いただけで、内部情報が更新されて、ファイルが『更新あり』の状態にされてしまう」ので、ファイルそのものを読み取り専用(上書き禁止)にしてはいけません。 下手に読み取り専用(上書き禁止)にしちゃうと、上書き保存ボタンを押された時とかに「上書き出来ないから別名保存しろ」と、別名保存のダイアログが出たりして、面倒になります。 なお、ファイルを開いて「上書き保存」をされると、中身は書き換わってないですけど、保存は行われるので、ファイルのタイムスタンプ(更新日時)が書き変わってしまいます(タイムスタンプの更新は避けられません)

goulden149
質問者

お礼

ご回答ありがとうございます。 記し忘れていましたが、この設定を行う各ファイルの中には、 「作業時の書き換えはOKだけど、保存はNG」という、 作業用オンリー(?)にしたいと思っているものがあります。 上記の方法は既に試しておりました。 丁寧なアドバイスをいただき、大変恐縮です。ありがとうございました。 *** >xlsファイルは、上記のように「ファイルを開いただけで、内部情報が更新されて、ファイルが『更新あり』の状態にされてしまう」ので、ファイルそのものを読み取り専用(上書き禁止)にしてはいけません。 他のファイルで何も手を付けていないのに「保存しますか?」と聞かれることがありました。 この疑問が解けました。今後の参考にさせていただきたいと思います。