Officeファイルの読み取り専用パスワード有無を判定する(普通のやり方、処理に時間がかかります・・・)

ExcelVBA

ExcelやWordなどOfficeファイルに読み取り専用パスワードがかかっているか、マクロで判定したい局面があります。この処理を行う様々な記事やコードがWeb上で公開されていますが、マクロでファイルを開いてみて、うまく開けなかったら読み取り専用パスワードがあると判断するというロジックが多いようです。私も次のようなコードで処理していました。

このように呼び出して使用します。

ファイルの種類に応じて、Excel、Word、PowerPointのアプリケーションオブジェクトを生成、実際にファイルを開いてみて、開けなかったら「パスワード有」と判定する処理で、判定したいファイルのフルパスを渡すと、パスワードの有無が文字列が返ってきます。また、ファイルオープン時のエラーDescription文字列も()書きで返すようにしています。

エラーDescription文字列はアプリケーションによってまちまちで、次のような感じです。
 パスワード有(’Open’ メソッドは失敗しました: ‘Presentations’ オブジェクト)
 パスワード有(Presentations.Open : 読み取りパスワードをもう一度入力してください(&P):)
 パスワード有(パスワードが正しくありません。文書を開けません。パスワード有(入力したパスワードが間違っています。CapsLock キーの状態に注意して、大文字と小文字が正しく使われていることを確認してください。)

このコードは、毎回、アプリケーションオブジェクトをCreateしているので、連続処理する場合は、PublicやPrivateなど広域変数でobjAppとobjFileを宣言、呼び出し側のMainプロシージャでCreateしたアプリケーションオブジェクトを使いまわすのがよいと思います。

実務上は、これで問題ないのですが、大量のファイルを対象に判定処理する場合、時間がかかってしまうんですよね。それはそうです、実際にファイルを開いちゃっているわけですから。これを何とか高速処理したいと思ってしまい、その方法を次のエントリーで紹介したいと思います。

コメント

タイトルとURLをコピーしました