Home » エクセルマクロ・Excel VBAの使い方 » Office連携 » 開いているWordファイルのブックマーク名一覧を作成するExcelマクロ

開いているWordファイルのブックマーク名一覧を作成するExcelマクロ

対象:Excel2007, Excel2010, Excel2013

アクティブな文書から新しいExcelブックに「ブックマーク名・ページ番号・行番号」の一覧を作成するWordマクロをご紹介しました。

Wordマクロではなく、Excelマクロにしておくという考え方もあるでしょう。

Wordマクロの場合は新しいExcelファイルにブックマーク名一覧を作成しましたが、Excelマクロの場合は、ブックマーク名一覧を作成するワークシートを決めておいて、ブックマーク一覧を作り直すほうが、便利そうに思えます。

ブックマークの存在するWordファイルをどう指定するについても、いくつかの実装方法が考えられますが、このあとにブックマークの削除作業が続くことをイメージすると、ブックマークの存在しているWordファイルを事前に開いておいてからブックマーク一覧を作り直すという仕様が良さそうです。

[スポンサードリンク]

開いているWordファイルからブックマーク一覧を作成するサンプルマクロ

ブックマークの含まれているWordファイルが開かれている状態で、以下のマクロを実行すると、アクティブなワークシートにブックマーク名等の一覧が作られます。

Sub 開いているWordからブックマーク名一覧を作成する()

 Const wdActiveEndAdjustedPageNumber = 1
 Const wdFirstCharacterLineNumber = 10

 Dim wrd As Object  'Word.Application
 Dim cnt As Long   'ブックマークの数
 Dim arr()       'ブックマーク名,ページ番号,行番号
 Dim doc_name As String
 Dim i As Long

 If MsgBox("アクティブなシートのブックマーク名一覧を作り直しますか?", vbYesNo) = vbNo Then Exit Sub

 On Error GoTo ERR_HNDL
 Set wrd = GetObject(Class:="Word.Application")
 With wrd.Documents(1)
  doc_name = .Name
  With .Bookmarks
   cnt = .Count
   ReDim arr(1 To cnt, 1 To 3)
   For i = 1 To cnt
    With .Item(i)
     arr(i, 1) = .Name
     With .Range
      arr(i, 2) = _
        .Information(wdActiveEndAdjustedPageNumber)
      arr(i, 3) = _
        .Information(wdFirstCharacterLineNumber)
     End With
    End With
   Next i
  End With
 End With

 Range("A1").CurrentRegion.Clear
 Range("A1").Value = doc_name
 Range("A2").Value = "ブックマーク名"
 Range("B2").Value = "ページ番号"
 Range("C2").Value = "行番号"
 Range(Cells(3, "A"), Cells(cnt + 2, "C")).Value = arr()
 Range("A1:C2").Font.Bold = True
 Range("A1").CurrentRegion.EntireColumn.AutoFit
 GoTo END_TASK

ERR_HNDL:
 MsgBox "エラーが発生しました。"
 Err.Clear

END_TASK:
 Set wrd = Nothing

End Sub

サンプルマクロの解説

既存のワークシートを上書きしてしまうので、このマクロでは、はじめに確認を行っています。
 If MsgBox("アクティブなシートのブックマーク名一覧を作り直しますか?", vbYesNo) = vbNo Then Exit Sub

開かれているWordファイルから、
 Set wrd = GetObject(Class:="Word.Application")
 With wrd.Documents(1)

文書名を変数・doc_nameに格納後、
  doc_name = .Name

ブックマークの数を取得して2次元配列のサイズを決めて、
  With .Bookmarks
   cnt = .Count
   ReDim arr(1 To cnt, 1 To 3)

For~Nextループを回しながら、
   For i = 1 To cnt

ブックマーク名・ページ番号・行番号を格納しています。
    With .Item(i)
     arr(i, 1) = .Name
     With .Range
      arr(i, 2) = _
        .Information(wdActiveEndAdjustedPageNumber)
      arr(i, 3) = _
        .Information(wdFirstCharacterLineNumber)

アクティブなシートを一旦クリアしてから、
 Range("A1").CurrentRegion.Clear

A1セルにWordのファイル名、
 Range("A1").Value = doc_name

A2:C2セルに見出しを入力して、
 Range("A2").Value = "ブックマーク名"
 Range("B2").Value = "ページ番号"
 Range("C2").Value = "行番号"

ブックマーク名・ページ番号・行番頭を一気に書き出して、
 Range(Cells(3, "A"), Cells(cnt + 2, "C")).Value = arr()

ワークシートの体裁を整えています。
 Range("A1:C2").Font.Bold = True
 Range("A1").CurrentRegion.EntireColumn.AutoFit

実行時エラーの発生する可能性がいろいろと考えられますが、ここでは最低限のエラートラップだけを入れておきました。
 On Error GoTo ERR_HNDL
ERR_HNDL:
 MsgBox "エラーが発生しました。"
 Err.Clear

Wordへの参照設定が行われていないことを前提に、以下の定数宣言をプロシージャ内で行っていますが、参照設定されている場合は不要です。
 Const wdActiveEndAdjustedPageNumber = 1
 Const wdFirstCharacterLineNumber = 10

関連語句
VBA, Visual Basic for Applications

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » Office連携 » 開いているWordファイルのブックマーク名一覧を作成するExcelマクロ

「Office連携」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.