
VA公用文などのワード用アドインは順調に動いてますか?

大丈夫です! ただ、ある人から「マクロにはセキュリティ上の問題がある」と言われてしまいました。特にスタートアップフォルダに不正なマクロファイルがインストールされると、自動的に実行されてしまうので危ないそうです。

そうなんですね。インターネットなどからダウンロードしたマクロファイルはブロックされていますので、そのまま実行されることはないはずですが、安全性をさらに高めるための対策を考えてみましょう。
概要
Wordのスタートアップフォルダを書き込み禁止状態にして、不正なマクロファイルの侵入を防ぐセキュリティシステムです。Word起動時に自動でフォルダを保護し、メンテナンスなどのために必要な時だけ手動で保護を解除できるようにします。
機能
- 自動保護:Word起動時にスタートアップフォルダを自動で書き込み禁止に設定します。
- 手動切り替え:クイックアクセスツールバーの「鍵」ボタンをクリックすると、保護状態を手動で切り替えられます。
- 状態確認:手動切り替え時には、現在の保護状態を自動判定してから適切な処理を実行します。

プログラムのダウンロード
準備
ダウンロードしたファイルを「スタートアップフォルダ」に保存すれば、アドインとして、いつでもマクロを利用できるようになります。(他の使い方もできますが、この方法を推奨します。)
使い方
ワードを起動すると、スタートアップフォルダが書き込み禁止に設定されます。
スタートアップフォルダの書き込み禁止を解除したい場合は、クイックアクセスツールバーの「鍵」ボタンをクリックしてください。この状態でもう一度クリックすると、書き込み禁止が設定されます。
「VA公用文」などでオプションを設定する際に「この設定を初期値にする」を選択した場合は、マクロファイル自体への書き込みが行われます。このため、あらかじめ「VAプロテクト」で書き込み禁止を解除する必要がありますのでご注意ください。
動作原理
フォルダの保護
このマクロは、Windowsのファイルアクセスコントロールリスト(ACL)という仕組みを利用して、フォルダを保護します。ACLとは、「誰が」「どのフォルダやファイルに」「何をしていいか」を管理するWindowsの基本的なセキュリティ機能です。
このマクロは、次の手順でフォルダを保護します。
- 権限継承の停止:まず、スタートアップフォルダが親フォルダから「自動的に権限をもらう」設定を止めます
- 書き込み権限の明示的拒否:現在ログインしているユーザーに対して「このフォルダには絶対に書き込めない」という強制的なルールを設定します
- ディレクトリ作成の拒否:同時に「新しいフォルダも作れない」という制限も追加します
Windowsでは「拒否」の権限が「許可」の権限よりも常に優先されます。つまり、他の設定でどんなに強い「書き込み許可」があったとしても、「拒否」が設定されていれば必ずブロックされます。このため、簡単には突破できません。
保護を解除する際は、この逆の手順を実行します。
- 拒否ルールの削除:「書き込み禁止」「フォルダ作成禁止」のルールを取り除きます
- 権限継承の復活:親フォルダから通常の権限設定を再度受け取るように戻します
これにより、スタートアップフォルダ内のファイルのメンテナンスなどが行えるようになります。
状態の判定
スタートアップフォルダが保護されているかどうかの判定は、テストファイルの書き込みによって判定しています。書き込みが失敗すれば保護されている。成功すれば保護されていないということになります。
注意事項
セキュリティ要件
- ACLの操作には管理者権限が必要な場合があります。
- スタートアップフォルダにインストールする必要があります。
- スタートアップフォルダはトラストセンターで「信頼できる場所」に設定してください。
使用制限
- Windows以外では動作しません。
- Word 2010以降でなければ動作しません。
トラブルシューティング
よくある問題
問題1:「パスが取得できません」エラー
- 原因:Word設定の問題です
- 対処:ファイル → オプション → アドイン → スタートアップフォルダをご確認ください
問題2:コマンド実行エラー
- 原因:権限不足です
- 対処:管理者権限でWordを起動してください
問題3:保護が解除されない
- 原因:WindowsのACL(アクセス・コントロール・リスト)設定との競合です
- 対処:手動でフォルダプロパティ → セキュリティタブから権限をご確認ください
関連記事
VBAアセットが推奨するマクロに関するセキュリティ対策については、こちらで紹介しています。
コメント
スタートアップフォルダの保護および保護の解除が完了したことを確認するプロセスを追加しました。(Ver110)