アクティブな文書のすべてのブックマークを削除するWordマクロをご紹介しました。
Wordのブックマーク機能が活用されている現場をイメージすると、全ブックマークを削除するよりも、たくさんのブックマークの中の、いくつかは残してその他を削除したいというニーズのほうがありそうです。
このニーズを満たすための実装方法は、いろいろ考えられます。
いろいろと考えられますが、Excelにブックマーク名一覧を作成して、残したいブックマークをExcel上で指定して、他のブックマークを削除するという方法が、私には便利そうに感じます。
そのために、まず、ブックマーク名等の一覧をExcelに作成するWordマクロを作ってみました。
ブックマーク名一覧をExcelに作成するサンプルマクロ
ブックマークの存在するWordファイルがアクティブな状態で、以下のマクロを実行すると、新しいExcelファイルに、ブックマーク名・ページ番号・行番号の一覧が作成されます。
Dim xls As Object 'Application.Excel
Dim bkm As Bookmark
Dim arr() 'ブックマーク名, ページ番号, 行番号
Dim cnt As Long 'ブックマーク数
Dim i As Long
With ActiveDocument.Bookmarks
cnt = .Count
If cnt = 0 Then
MsgBox "この文書にはブックマークが存在しません"
Exit Sub
End If
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
Set xls = CreateObject("Excel.Application")
With xls
.Workbooks.Add
.Range("A1").Value = ActiveDocument.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
.Visible = True
End With
Set xls = Nothing
サンプルマクロの解説
2次元配列に「ブックマーク名, ページ番号, 行番号」の形でデータを格納しておいてから、新規のExcelファイルに一気に書き出すというマクロにしてみました。
アクティブな文書の、ブックマークの数を調べて、
With ActiveDocument.Bookmarks
cnt = .Count
If cnt = 0 Then
MsgBox "この文書にはブックマークが存在しません"
Exit Sub
2次元配列のサイズを決めてから、
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)
ブックマーク名・ページ番号・行番号の取得で利用している各種プロパティは、既にご紹介しているブックマーク位置を取得するマクロと同じです。
配列にデータを格納したら、Excelを起動して、
Set xls = CreateObject("Excel.Application")
新規ブックを開き、
With xls
.Workbooks.Add
A1セルに文書名を入力し、
.Range("A1").Value = ActiveDocument.Name
A2:C2セルに見出しを作成してから、
.Range("A2").Value = "ブックマーク名"
.Range("B2").Value = "ページ番号"
.Range("C2").Value = "行番号"
A3セル以下に2次元配列の値を一気に書き出してから、
.Range(.Cells(3, "A"), .Cells(cnt + 2, "C")).Value = arr()
体裁を整えてからExcelを表示しています。
.Range("A1:C2").Font.Bold = True
.Range("A1").CurrentRegion.EntireColumn.AutoFit
.Visible = True
最終更新日時:2019-02-06 04:56
Home » ワードマクロ・Word VBAの使い方 » Office連携 » ブックマーク名一覧をExcelに作成するWordマクロ