質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Word

Microsoft WordはMicrosoftが開発した業務用の文書生成用のソフトウェアです。

Q&A

解決済

1回答

1300閲覧

Wordのマクロでマクロ設定ファイルのみナビゲーションウィンドウを表示したい

mimon

総合スコア15

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Word

Microsoft WordはMicrosoftが開発した業務用の文書生成用のソフトウェアです。

0グッド

0クリップ

投稿2023/01/31 11:15

前提

word 2021

目次を作成したwordファイル表示時に自動的にナビゲーションを表示して
PDFのしおりのように使用したいと思い、マクロでナビゲーションの自動表示を設定しました。
しかし、マクロを設定したファイルのみナビゲーションを表示したいのですが、
一旦マクロの設定があるファイルを開いてナビゲーションが表示されると、
他のwordファイル(マクロ設定なし)を開いた時にもナビゲーションが表示されてしまいます。

実現したいこと

あくまでもマクロの範囲はマクロ設定ファイルのみにしておきたいのですが、
何か方法はありますでしょうか?

該当のソースコード

vba

1Private Sub Document_Open() 2 ThisDocument.ActiveWindow.DocumentMap = True 3End Sub 4Private Sub Document_Close() 5 ThisDocument.ActiveWindow.DocumentMap = False 6End Sub

試したこと

Document_Open()の部分でナビゲーションは表示されるので
同じくDocument_Close()でFalseを設定すればナビゲーションが非表示になって終わればいいなと思ったんですが駄目でした。
Project配下のThisDocumentファイルに記述しています。

何か方法はありますでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

WithEvents 変数を使用して、Word.Application オブジェクトでの各イベントの発生時にナビゲーションウィンドウを非表示化する処理を実行なさればよろしいでしょう。

vba

1'ThisDocumentモジュール 2Option Explicit 3 4'WithEvents 変数の宣言 5Private WithEvents appWord As Word.Application 6 7'このドキュメントが開かれた時 8Private Sub Document_Open() 9 10 'ナビゲーションウィンドウを表示 11 Application.ActiveWindow.DocumentMap = True 12 13 'Word アプリケーションの参照 14 Set appWord = Application 15 16End Sub 17 18'このドキュメントが閉じられる時 19Private Sub Document_Close() 20 21 Dim docNew As Word.Document 22 23 '現在開かれているドキュメントが1つだけ(このドキュメントのみ)である場合 24 If appWord.Documents.Count = 1 Then 25 'ナビゲーションウィンドウを非表示に 26 appWord.ActiveWindow.DocumentMap = False 27 '画面の更新をオフに 28 appWord.ScreenUpdating = False 29 'ダミー用新規ブックの作成 30 Set docNew = appWord.Documents.Add 31 'ナビゲーションウィンドウを非表示に 32 appWord.ActiveWindow.DocumentMap = False 33 '新規ブックを保存せずに閉じる 34 docNew.Close False 35 Set docNew = Nothing 36 '画面の更新をオンに 37 appWord.ScreenUpdating = True 38 End If 39 40 'Word アプリケーションの参照を解放 41 Set appWord = Nothing 42 43End Sub 44 45'Word アプリケーションによって新規の Word ドキュメントが作成された時 46Private Sub appWord_NewDocument(ByVal Doc As Document) 47 48 'ナビゲーションウィンドウを非表示に 49 appWord.ActiveWindow.DocumentMap = False 50 51End Sub 52 53'Word アプリケーションによって既存の Word ドキュメントが開かれた時 54Private Sub appWord_DocumentOpen(ByVal Doc As Document) 55 56 '開かれたドキュメントがこのドキュメントではない場合 57 If Doc.FullName <> Me.FullName Then 58 'ナビゲーションウィンドウを非表示に 59 appWord.ActiveWindow.DocumentMap = False 60 End If 61 62End Sub

2023/02/01 15:22 追記:

マクロ有効ブックのみが開かれている状況においてそのブックが閉じられた時に、次に開かれたブック上においてナビゲーションウィンドウが表示されないようにするよう、Document_Close プロシージャのコードを修正しました。

投稿2023/02/01 02:40

編集2023/02/01 06:23
sk.exe

総合スコア744

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mimon

2023/02/01 03:05

ご回答ありがとうございます! 大変勉強になります。 確かにマクロ設定ファイルを開いたまま別のWordファイルを開いた場合はナビゲーションは表示されませんでしたが、マクロ設定ファイルを一旦閉じて別のWordファイルを開いた場合はナビゲーションが表示されてしまいました。 ファイルに設定したマクロが次回word起動時のデフォルトになってしまうイメージです。
sk.exe

2023/02/01 05:01 編集

> 確かにマクロ設定ファイルを開いたまま別のWordファイルを開いた場合は > ナビゲーションは表示されませんでしたが、マクロ設定ファイルを一旦閉じて > 別のWordファイルを開いた場合はナビゲーションが表示されてしまいました。 基本的に、新規ブックが作成された際や既存のブックが開かれた際において そのブック上にナビゲーションウィンドウが初期表示されるか否かは、 その直前にアクティブだったブックにおけるナビゲーションウィンドウの 表示状態に左右されます。 例えば、マクロ有効ブックとは別に開かれているブックにおいて 既にナビゲーションウィンドウが表示されていて、前者のブックを閉じた後に 後者のブックがアクティブになっている状態でその更に別のブックを開けば おっしゃるような結果になるでしょう。 マクロ有効ブックが開かれる前や閉じられた後のWordの挙動まで制御することはできませんし、 またユーザーの操作によって任意のブック上でナビゲーションウィンドウが 表示されることもありますので、それはそういうものだと割り切った方が よいのではないかと思います。
mimon

2023/02/01 06:33

度々のご回答ありがとうございます。 修正版もありがとうございます。試したところ希望通りの動きになっていました。 確かにあまり気にしなくてもよい制御かもしれませんが、 VBAの勉強にもなりましたので大変感謝しております。 お時間いただきありがとうございました!
sk.exe

2023/02/01 06:34

コード修正後に再テストしてみたところ、ダミー用新規ブックを作成→閉じるまでの処理はなくてもよくて、ScreenUpdatingの制御だけでも何とかなるかもしれません。
mimon

2023/02/01 07:35

度々ありがとうございます! ちょっとネチネチやってみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問