読み取り専用のファイル

ファイルのプロパティの設定で読み取り専用の設定を行うことが出来ます。

読み取り専用のファイルを書き込みモードのOpenメソッドで開こうとするとエラーになります。

そのエラーを回避するために、事前に読み取り専用かどうかを調べる方法を紹介します。


ネットワークドライブの読み取り専用ファイルの注意点

上にも書きましたが、読み取り専用ファイルを書き込みモードでOpenしようとするとエラーになります。

ところが、これはローカルディスクにあるファイルの話であり、ネットワークドライブにある読み取り専用ファイルの書き込みOpenはエラーになりません。

そしてなんと、Openが正常のためかPrintメソッドで書き込みできてしまいます。私もこれに気が付いたときには驚きました。読み取り専用の意味ないじゃん、と。

少ししか調べてませんが、どういう理屈なのかは結局分かっていません。

いずれにしても、読み取り専用+Openメソッド=エラー、という認識はやめておいた方がいいと思われます。


ファイルの属性を調べて読み取り専用かどうか判定する

GtAttr関数を使うとファイルの属性を取得することが出来ます。

その属性はVbFileAttribute列挙型の定数で、以下の種類があります。

VbFileAttribute列挙型

定数 内容
vbNormal 0 通常ファイル
vbReadOnly 1 読み取り専用ファイル
vbHidden 2 隠しファイル
vbSystem 4 システムファイル
vbVolume 8 ボリュームファイル(使いません)
vbDirectory 16 フォルダ
vbArchive 32 アーカイブ
vbAlias 64 エイリアス(Macのみ。Windowsのショートカット)

GetAttr関数については「ファイルやフォルダの属性を調べる(GetAttr)」をご参照ください。


読み取り専用かどうかの判定関数

以下は引数のファイルが読み取り専用かどうかを判定する関数です。

読み取り専用の場合はTrueを返し、そうでない場合はFalseを返します。

引数ファイルが存在しているかどうかは判定していないため、ファイル存在チェックは事前に行う必要があります。

ファイル存在チェックについては「VBAでファイルの存在をチェックする」をご参照ください。



使い方

上のIsReadOnly関数の利用例です。

15行目でファイルが読み取り専用かどうかを判定しています。

一応ファイルの存在チェックも入れています。コードは上のリンクにあるファイル存在チェックのソースを使ってます。

ファイル存在チェックのコードは以下を使ってます。