その一つにOffice製品、特にWordがあります。
Wordは、数年前まで敬遠していたプロダクトでしたが実際に使ってみると非常に使えるツールだと認識。
さて、今回は保護されたマクロ付Wordファイルを起動、保護ビューではなく印刷レイアウトを直接表示する方法をメモ。
注意点
Word の[保護ビュー]は、Microsoft Officeにおいて下記のように説明されています。インターネットやその他の安全でない可能性のある場所にあるファイルには、コンピューターに害をもたらすウイルス、ワーム、その他のマルウェア類が含まれている可能性があります。このような安全でない可能性のある場所にあるファイルは、コンピューターを保護する目的により保護ビューで開くことができます。保護ビューを使用することで、リスクを抑えながら、ファイルを読み取り、その内容を確認できます。今回ご紹介する内容は、社内システム等所在や出所が確実に分かっている安全なWord ファイルを対象としています。
今回の環境
- Word 2013を使用
- ファイルは、マクロ付き(.docm)
- コンテンツ コントロールやActiveX コントロールを配置
- [編集の制限]機能を使用し文章を保護
なお、[フォームへの入力]のみ許可する
なお、Word 2007では[編集の制限]をかけても印刷レイアウトで起動してくれます。
問題点
上記環境でWord ファイルを開くと、Word 2010以降に搭載された[保護ビュー]が機能します。これはWordの仕様である事を理解してますが、常用する際にいくつか問題が出てきました。
- 印刷レイアウトに変更するためには、[表示]→[文書の編集]を起動ごとに選択しなければならない(非常に面倒である)
- (フォームを初期化するマクロを実行する)ActiveX ボタン コントロールを操作するとエラーになる
----------------------------------------------------
実行エラー ‘6124’:
この選択範囲は保護されているため、編集できません。
- (フォーム コントロールの編集が読み取り専用のため)フォームへの入力・削除等が一切出来ない
解決策
試行錯誤した結果、下記方法で今回の問題を解決する事が出来ました。- 標準モジュールを挿入、開く
- AutoOpen マクロに、下書きレイアウトで表示するスクリプトを記述
ActiveWindow.View.Type = wdNormalView
※この処理を行う事で、保護ビューの表示を回避します
- ThinDocument モジュールを開く
- Document_Open マクロに、印刷レイアウトを表示するスクリプトを記述
ActiveWindow.View.Type = wdPrintView
AutoOpen マクロで実行した際の各Typeの挙動
検証した結果、wdNormalViewおよびwdWebViewをAutoOpen マクロに指定する事で保護ビューを回避できます。wdConflictView | × | VBA 実行エラー |
wdMasterView | × | VBA 文書 保護エラー |
wdNormalView | ○ | 下書きレイアウトで表示 フォーム位置の崩れあり コントロールの操作は可能 |
wdOutlineView | × | VBA 文書 保護エラー |
wdPrintPreview | △ | 印刷プレビューで表示 フォーム操作が出来ない |
wdPrintView | × | 保護ビューで表示 |
wdReadingView | × | 保護ビューで表示 |
wdWebView | ○ | Webレイアウトで表示 フォーム位置の崩れあり コントロールの操作は可能 |
Word起動後のマクロが実行される順番
- AutoOpen
- Document_Open
また、初心者備忘録さんのサイトでも説明されております。