読み取り専用を推奨するダイアログ
ブックを開く際に以下のようなダイアログを見たことがあるかもしれません。
これはブックを保存する際に「読み取り専用を推奨する」ように設定されている場合に表示され、無用にブックを更新されることを防ぎたい場合によく使われる設定です。
なお、Excel上で「読み取り専用を推奨する」手順は以下の通りです。
- ブックを開き、「ファイル」メニュー→名前を付けて保存、を選ぶ。
- ブック名を入力するテキストボックスの下にある「その他のオプション」を押す。(保存先フォルダでも可)
- 「名前を付けて保存」ダイアログ → 右下の「ツール」 → 「全般オプション」を選ぶ。
- 「全般オプション」ダイアログで「読み取り専用を推奨する」にチェックを付けてOKボタンを押す。
この設定は自動で設定されることはありません。必要と判断した場合に設定しなければなりません。
この手順をVBAで行う方法を以下で紹介します。
「読み取り専用を推奨する」の用途
「読み取り専用を推奨する」にチェックを付ける用途として考えられるのは2つあります。1つは誤って更新したくない場合、もう1つは複数の人が開くブックの場合です。
Excelはただ開いただけなのに、閉じようとすると「保存しますか?」という内容のダイアログで聞かれることがあります。ここで保存してしまうと更新日時が変わります。これが嫌な場合には効果があります。
また、複数の人が同じブックを扱う場合に、見たいだけの人、更新したい人、と、用途が異なる人が複数いる場合に、誰かが普通に開いてしまうと他の人は更新が出来なくなります。読み取り専用で開いておけば誤って更新することがなくなるのと、他の人の更新を妨害することもなくなります。
例えば5人が同じブックを見ようとしている場合に、4人が読み取り専用で開いていても、残る1人が「読み取り専用で開きますか?」のダイアログで「いいえ」を押せば、更新は可能です。
EXCEL.EXEには/rを付けて起動すれば読み取り専用で開くことが出来るスイッチがありますが、なかなかマニアックな機能なため、複数の人が普通にExcelを使う分にはそのような注意をもってもらうのは大変でしょう。
なお、/rでの読み取り専用の方法については「VBAでセルやハイパーリンクのブックを読み取り専用で開く」をご参照ください。
VBAで「読み取り専用を推奨する」にチェックを付ける
VBAでブックの読み取り専用を推奨をするように設定するには、Workbookオブジェクトの名前を付けて保存を行うSaveAsメソッドのReadOnlyRecommended引数にTrueを設定します。
SaveAsメソッドの詳細については「VBAでブックに名前を付けて保存する(SaveAs)」をご参照ください。
以下のコードは指定したブックを読み取り専用で推奨するように設定するサンプルです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
Sub SaveAsReadOnlyRecommendedTest() Dim wb As Workbook '// ブックを指すWorkbookオブジェクト Dim sBookPath As String '// ブックのファイルパス '// 上書き確認ダイアログを非表示にする Application.DisplayAlerts = False sBookPath = "V:\aaa\Book1.xlsx" '// 対象ブックを開く '// ReadOnly:=False(読み取り専用ではなく更新可能状態で開く) '// IgnoreReadOnlyRecommended:=True(既に読み取り専用を推奨が設定されていてもそのダイアログを表示しない) Set wb = Workbooks.Open(Filename:=sBookPath, ReadOnly:=False, IgnoreReadOnlyRecommended:=True) '// 読み取り専用を推奨する設定を行い、保存する Call wb.SaveAs(ReadOnlyRecommended:=True) '// ブックを閉じる Call wb.Close Application.DisplayAlerts = True End Sub |
コード説明
読み取り専用を推奨する場合の処理はSaveAsメソッドの部分ですが、実際に実行する場合には2つの注意点があります。
まず1つは、同じブック名で保存することになるため、「既にファイルが存在しています。上書きしますか?」というダイアログが表示されてしまう点です。これを防ぐために「Application.DisplayAlerts = False」で確認ダイアログを出さないようにしています。
確認ダイアログを非表示にする方法の詳細については「VBAでExcelブックを開く方法(Workbooks.Open)」をご参照ください。
もう1つは、既に「読み取り専用を推奨する」設定がされている場合に、ブックを開く際のOpenメソッドを実行すると、設定した通りに「読み取り専用を推奨する」ことを確認するダイアログが表示されてしまう点です。これも1つ目と同様に表示させないようにOpenメソッドの「IgnoreReadOnlyRecommended」引数にTrueを設定しています。
使い方
8行目のsBookPathの設定で、「読み取り専用を推奨する」にチェックを付けたいブックのフルパスを指定します。
あとは関数自体を実行すると、そのブックの「読み取り専用を推奨する」にチェックが付いた状態で保存されます。
次回からそのブックを開いた際には読み取り専用を推奨するかどうかの確認ダイアログが表示されるようになります。