- ベストアンサー
自分のExcelを読み取り専用で開くVBAは?
- Excelファイルを手動で開くとき、読み取り専用にする方法について質問です。
- VBAを使用してExcelファイルを読み取り専用で開く方法を探しています。
- ファイルのプロパティから「読み取り専用」にチェックを入れても、チェックが外れてしまい困っています。VBAで読み取り専用にする方法はありますか?
- みんなの回答 (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 '//
その他の回答 (1)
- chie65536(@chie65535)
- ベストアンサー率44% (8800/19958)
シートの中身を「書き換えさせたくない」のであれば、以下のようにします。 1.書き換えさせたくないセルを選択する。すべてであれば、全セルを選択する。 2.「書式」→「セル」→「保護」タブ→「ロック」にチェックを入れる→「OK」ボタン。 3.「ツール」→「保護」→「シートの保護」→「シートとロックされたセルを保護~」にチェックを入れる→「シートの保護を解除する為のパスワード」に、任意のパスワード文字列を入力する→「OK」ボタン。 4.上記1~3を、すべてのシートに対して行う。 5.「ファイル」→「上書き保存」で、ブック(ファイル)を上書き保存する。 これでオッケーです。xlsファイル(ブックファイル)を、読み取り専用にする必要はありません。 ファイルを開くと、カーソルの位置情報とかが更新されてしまい、閉じようとすると「Book1への変更を保存しますか?」と言うダイアログが出ますが「はい」を押しても「いいえ」を押しても、セルの中身は書き換え出来ません。 以下、蛇足ですが。 xlsファイルは、上記のように「ファイルを開いただけで、内部情報が更新されて、ファイルが『更新あり』の状態にされてしまう」ので、ファイルそのものを読み取り専用(上書き禁止)にしてはいけません。 下手に読み取り専用(上書き禁止)にしちゃうと、上書き保存ボタンを押された時とかに「上書き出来ないから別名保存しろ」と、別名保存のダイアログが出たりして、面倒になります。 なお、ファイルを開いて「上書き保存」をされると、中身は書き換わってないですけど、保存は行われるので、ファイルのタイムスタンプ(更新日時)が書き変わってしまいます(タイムスタンプの更新は避けられません)
お礼
ご回答ありがとうございます。 記し忘れていましたが、この設定を行う各ファイルの中には、 「作業時の書き換えはOKだけど、保存はNG」という、 作業用オンリー(?)にしたいと思っているものがあります。 上記の方法は既に試しておりました。 丁寧なアドバイスをいただき、大変恐縮です。ありがとうございました。 *** >xlsファイルは、上記のように「ファイルを開いただけで、内部情報が更新されて、ファイルが『更新あり』の状態にされてしまう」ので、ファイルそのものを読み取り専用(上書き禁止)にしてはいけません。 他のファイルで何も手を付けていないのに「保存しますか?」と聞かれることがありました。 この疑問が解けました。今後の参考にさせていただきたいと思います。
お礼
ご回答ありがとうございます。上記のコード、試してみました。 少し短くできるかと思って、以下も試してみました。 Private Sub Workbook_Open() ThisWorkbook.ChangeFileAccess Mode:=xlReadOnly End Sub すると、以下のメッセージが出ます。 「読み取り専用の切り替えを行う前に、編集内容を保存しますか?」 …ご提示のように、Savedプロパティの設定がポイントかと思いました。 上記だと丸ごと各ファイルに貼って回ってもよさそうですね! こちらを使わせていただこうと思います。 独断ですが、ベストアンサーとさせていただきます。ありがとうございました。