Home » エクセルマクロ・Excel VBAの使い方 » Office連携 » Word文書のコメントを取得して一覧を作成するExcelマクロ

Word文書のコメントを取得して一覧を作成するExcelマクロ

対象:Excel2007, Excel2010, Excel2013, Windows版Excel2016

アクティブなWord文書に含まれるコメントの一覧を新しいExcelブックに出力する、Wordマクロをご紹介しました。

同様の処理をExcel側から行うことも勿論できます。

[スポンサードリンク]

Word文書からコメントを取得してExcelに一覧を作成するサンプルマクロ

以下のようなExcelマクロで、アクティブなブックの先頭にワークシートを挿入して、開いている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

 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

End Sub

サンプルマクロの解説

このマクロに限らず、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
と定数を定義しています。

関連語句
VBA, Visual Basic for Applications

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » Office連携 » Word文書のコメントを取得して一覧を作成するExcelマクロ

「Office連携」の記事一覧

検索


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

.