なぜ、ファイルを「読み取り専用」にするのか
実務の現場では、共有フォルダにあるテンプレートファイルや、マスタデータを「誰かに書き換えられてしまった」というトラブルが頻発します。エクセルの誤操作による上書き保存を物理的に防ぐ最も確実な方法は、Windowsのファイル属性で「読み取り専用」に設定することです。
今回は、手動での設定手順に加え、VBAを使ってこの設定を制御するプロフェッショナルな手法をご紹介します。
手動設定の基本
Windowsの標準機能を使う方法は非常にシンプルです。
1. エクスプローラーで対象のファイルを右クリックします。
2. [プロパティ]を選択します。
3. [全般]タブにある[属性]の[読み取り専用]にチェックを入れ、[OK]を押します。
これだけで、ユーザーがファイルを開こうとすると「読み取り専用」として扱われ、そのまま保存ボタンを押しても「名前を付けて保存」のダイアログが表示されるようになります。
VBAで読み取り専用属性を操作する
実務では、特定の処理が終わった後に、配布用ファイルを自動的に読み取り専用にしたいというケースもあるでしょう。VBAでファイルの属性を変更するには SetAttr関数 を使用します。
以下は、指定したパスのファイルを読み取り専用に設定するコード例です。
サンプルコード
Sub SetFileReadOnly()
Dim targetPath As String
targetPath = “C:\Work\Sample.xlsx”
‘ ファイルの属性を読み取り専用(vbReadOnly)に設定する
‘ vbNormal は通常の属性に戻す場合に使用します
SetAttr targetPath, vbReadOnly
MsgBox “ファイルを読み取り専用に設定しました。”
End Sub
プロからのワンポイントアドバイス
VBAでファイルを操作する際、もし「読み取り専用」になっているファイルをプログラムから書き込もうとすると、実行時エラーが発生して止まってしまいます。
大規模なツールを開発する際は、GetAttr関数 を使って事前に属性を確認し、読み取り専用であれば一時的に解除(vbNormalを設定)し、処理が終わったら再度読み取り専用に戻す、といった動的な制御を組み込むのがベテランの流儀です。
「うっかり上書き」を防ぐだけで、チームの生産性は大きく向上します。ぜひ、現場の運用ルールに合わせて活用してください。
