先日の記事(【読み物】Wordをアウトライナーとして使う!)にて、Wordをアウトライナーとして使うに至った経緯を紹介しました。
さっそく、アウトライナー用マクロ第1弾を紹介します。
文章を前後するときに、表示レベルを上げればカーソル移動が少なくなってわかりやすいと思ったので、表示するレベルを簡易に変更するマクロを作りました。
Wordでは、アウトライン表示にしたときに[アウトライン]タブの[アウトラインツール]グループにある以下のボタンです。ここでレベルを設定するんですね。
マウスを持って表示レベルをクリックして変更すればいいだけの話なんですが、やっぱりショートカットキーでこういう操作ができるとうれしいのでとりあえずつくったわけです(笑)。
今後使いながら、改良点を探っていこうと思います。
<目次>
このマクロでできること
表示するアウトラインレベルを設定します。
たとえば、以下のような表示になっているとします。アウトライン表示で、左側に対応するスタイル名を表示しています。Wordでは、アウトラインレベル(1~9)と見出し(1~9)スタイルが対応しています。
マクロを実行すると以下のダイアログボックスが表示されます。
ここで、アウトラインレベルを入力します。デフォルトでは「すべてのレベル」が表示されています。
レベル2まで表示する場合には「2」を入力します。
すると以下のようにレベル3以降がたたまれて非表示になります。
元の表示に戻すときには、このマクロを再度実行して、デフォルトの「すべてのレベル」のまま[OK]ボタンをクリックします。
マクロの解説
Inputboxを用いてユーザーと対話型にしています。
ここの入力値を規制するための仕組みが21行目~35行目に書かれています。
マクロ
Sub OL_レベルの表示() Dim myNumber As Variant 'レベルの入力 Dim myMessage As String 'メッセージ Dim myTitle As String 'タイトル '------------------------------------------- '表示をアウトラインモードへ変更 '------------------------------------------- If ActiveWindow.View.Type <> wdOutlineView Then ActiveWindow.View.Type = wdOutlineView End If '------------------------------------------- 'レベルの入力 '------------------------------------------- myTitle = "レベルの表示設定" myMessage = "レベルを入力してください。" & vbCr _ & "(半角・全角どちらでも可)" Do myNumber = InputBox(myMessage, myTitle, "すべてのレベル") 'キャンセルの場合終了 If myNumber = vbNullString Then Exit Sub End If 'すべてのレベル(デフォルト)を選択した場合 If myNumber = "すべてのレベル" Then Exit Do End If Loop While IsNumeric(myNumber) = False Or _ myNumber < 1 Or myNumber > 9 '------------------------------------------- 'レベルの表示切り替え '------------------------------------------- If myNumber = "すべてのレベル" Then ActiveWindow.View.ShowAllHeadings Else ActiveWindow.View.ShowHeading CInt(myNumber) End If End Sub