アクティブなWord文書に含まれるコメントの一覧を新しいExcelブックに出力する、Wordマクロをご紹介しました。
同様の処理をExcel側から行うことも勿論できます。
Word文書からコメントを取得してExcelに一覧を作成するサンプルマクロ
以下のようなExcelマクロで、アクティブなブックの先頭にワークシートを挿入して、開いている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
On Error GoTo ERR_HNDL
Set wrd = GetObject(Class:="Word.Application")
With wrd.Documents(1)
doc_name = .Name
With .Comments
cnt = .Count
ReDim arr(1 To cnt, 1 To 4)
For i = 1 To cnt
With .Item(i)
With .Reference
arr(i, 1) = .Information(wdActiveEndAdjustedPageNumber)
arr(i, 2) = .Information(wdFirstCharacterLineNumber)
arr(i, 3) = .Sentences(1).Text
End With
arr(i, 4) = .Range.Text
End With
Next i
End With
End With
Sheets.Add Before:=Sheets(1)
Range("A1").Value = doc_name
Range("A2").Value = "ページ番号"
Range("B2").Value = "行番号"
Range("C2").Value = "本文のセンテンス"
Range("D2").Value = "コメント文字列"
Range(Cells(3, "A"), Cells(cnt + 2, "D")).Value = arr()
Range("A1:D2").Font.Bold = True
Range("A:B").EntireColumn.ColumnWidth = 10
Range("C:D").EntireColumn.ColumnWidth = 50
GoTo END_TASK
ERR_HNDL:
MsgBox "エラーが発生したためマクロを中断します。"
Err.Clear
GoTo END_TASK
END_TASK:
Set wrd = Nothing
サンプルマクロの解説
このマクロに限らず、Officeを連携するマクロの場合、仕様はいくつものパターンが考えられます。
コメントを取得したいWordファイルをダイアログなどから指定するという方法もあるでしょうけれど、このマクロでは開いている一つ目のWord文書から、
Set wrd = GetObject(Class:="Word.Application")
With wrd.Documents(1)
コメントを取得して一覧を作成するという仕様にしました。
さまざまな実行時エラーが発生する可能性がありますが、以下のように、
ERR_HNDL:
MsgBox "エラーが発生したためマクロを中断します。"
Err.Clear
GoTo END_TASK
END_TASK:
Set wrd = Nothing
End Sub
実行時エラーが発生したときは、とにかく中断するようにしました。
前半の、
With wrd.Documents(1)
内はすべてWordのオブジェクト式で、
後半の、
Sheets.Add Before:=Sheets(1)
以下がすべてExcelのオブジェクト式です。
参照設定なしでWordの定数を使ったコードにするために、最初に、
Const wdActiveEndAdjustedPageNumber = 1
Const wdFirstCharacterLineNumber = 10
と定数を定義しています。
Home » エクセルマクロ・Excel VBAの使い方 » Office連携 » Word文書のコメントを取得して一覧を作成するExcelマクロ