2016-09-27 2 views
-1

2週間前にVBAを学ぶことにしました。しかし今、私は自分で解決できないような問題に遭遇しました。 私はさまざまなモジュールを含むExcel文書をセットアップしました。これらのモジュールの1つは、単語文書からコメントを、Excelシート上に抽出します。Wordのコメント抽出:番号付き見出しを取得するのに役立ちます

問題は、各コメントの上に最初に番号が付けられたヘッダーを抽出できなかったことです。これは非常に好きです。現在、私はコメントを抽出した後、手動でこれを行う必要があります。例として、「2.1.1タイトル」のように、各コメントの上に最初のヘッダーと番号を抽出したいと思います。コメントがヘッダー自体を強調表示している場合は、そのヘッダーも抽出する必要があります。

私はオンラインで見つけられるものに基づいてさまざまなことを試しましたが、さまざまなバグを経験するたびに修正できないようです。私はまだソートが機能するものを見つけていません。私は明らかにWord VBAで動作するはずのメソッドを試しましたが、Excel内で動作させることができませんでした。

誰かが番号付きヘッダーの抽出方法を知っていますか?どんなヒントやヒントも高く評価されます。

これは、モジュールの私が持っているコードです。ここで

Sub ImportCommentsDOCX() 
    Dim wdDoc As Object 
    Dim wdFileName As Variant 
    Dim i As Integer 

    wdFileName = Application.GetOpenFilename("Word files (*.docx),*.docx", , _ 
     "Browse for file to be imported") 
    If wdFileName = False Then Exit Sub '(user cancelled import file browser) 
    Set wdDoc = GetObject(wdFileName) 'open Word file 
    '1: if no comments' 
    With wdDoc 
     If wdDoc.Comments.Count = 0 Then 
      MsgBox ("No comments") 
     End If 
     '2; Set excel headers' 
     Range("B" & 1).Value = "Number" 
     Range("B" & 1).Font.Bold = True 
     Range("C" & 1).Value = "Comment" 
     Range("C" & 1).Font.Bold = True 
     Range("D" & 1).Value = "Highlighted text" 
     Range("D" & 1).Font.Bold = True 
     Range("E" & 1).Value = "Initials" 
     Range("B" & 1).Font.Bold = True 
     Range("F" & 1).Value = "Date (*Imprecise)" 
     Range("F" & 1).Font.Bold = True 

     '3: Extract comments and meta data' 
     For i = 1 To wdDoc.Comments.Count 
      Range("B" & 1 + i).Value = wdDoc.Comments(i).Index 
      Range("C" & 1 + i).Value = wdDoc.Comments(i).Range 
      Range("D" & 1 + i).Value = wdDoc.Comments(i).Scope.FormattedText 
      Range("E" & 1 + i).Value = wdDoc.Comments(i).Initial 
      Range("F" & 1 + i).Value = Format(wdDoc.Comments(i).Date, "dd/MM/yyyy") 'Unreliable: Sometimes gives wrong date' 
      'Range("G" & 3 + i).Value = wdDoc.Comments(i).Range.ListFormat.ListString 'Returns empty' 
     Next i 
    End With 
    Set wdDoc = Nothing 
    MsgBox ("Extraction has completed") 
End Sub 
+0

Wordでは、コメントはDocに適用されますが、ExcelではExcelのシートに適用できます。 'Debug.Print ActiveSheet.Comments.Count'。おそらくあなたはExcelファイルを開くときにExcelを使用する場所を変更するでしょうか? –

+0

わかりませんが、はい、開かれるdocという言葉が変わります。あなたは、私はVBAをExcelで単語VBAを使用して以前に会ったエラーを避けるためにデバッグすべきだと言っていますか? –

答えて

0

は、いくつかの調整であなたのコードです:

Sub ImportCommentsDOCX() 
    Dim wdDoc As Object 
    Dim wdFileName As Variant 
    Dim i As Integer 

    wdFileName = Application.GetOpenFilename("Word files (*.docx),*.docx", , _ 
     "Browse for file to be imported") 
    If wdFileName = False Then Exit Sub '(user cancelled import file browser) 
    Set wdDoc = GetObject(wdFileName) 'open Word file 
    '1: if no comments' 
    With wdDoc 
     wdDoc.Activate ' Added 
     If wdDoc.Comments.Count = 0 Then 
      MsgBox ("No comments") 
     End If 
     '2; Set excel headers' 
     Range("B" & 1).Value = "Number" 
     Range("B" & 1).Font.Bold = True 
     Range("C" & 1).Value = "Comment" 
     Range("C" & 1).Font.Bold = True 
     Range("D" & 1).Value = "Highlighted text" 
     Range("D" & 1).Font.Bold = True 
     Range("E" & 1).Value = "Initials" 
     Range("E" & 1).Font.Bold = True ' Modified 
     Range("F" & 1).Value = "Date (*Imprecise)" 
     Range("F" & 1).Font.Bold = True 

     '3: Extract comments and meta data' 
     For i = 1 To wdDoc.Comments.Count 
      Range("B" & 1 + i).Value = wdDoc.Comments(i).Index 
      Range("C" & 1 + i).Value = wdDoc.Comments(i).Range 
      Range("D" & 1 + i).Value = wdDoc.Comments(i).Scope.FormattedText 
      Range("E" & 1 + i).Value = wdDoc.Comments(i).Initial 
      Range("F" & 1 + i).Value = Format(wdDoc.Comments(i).Date, "dd/MM/yyyy") 'Unreliable: Sometimes gives wrong date' 
      'Range("G" & 1 + i).Value = wdDoc.Comments(i).Scope.ListFormat.ListString 'Returns empty' ' Modified ' Updated 
      Dim wp As Word.Paragraph: Set wp = wdDoc.Comments(i).Scope.Paragraphs(1) ' Updated 
      Do While wp.Range.ListFormat.ListString = "" ' Updated 
       Set wp = wp.Previous ' Updated 
      Loop ' Updated 
      Range("G" & 1 + i).Value = wp.Range.ListFormat.ListString ' Updated 
     Next i 
    End With 
    Set wdDoc = Nothing 
    MsgBox ("Extraction has completed") 
End Sub 

私のコメントに注意してください。

  1. を追加しましたと修正少なくとも私のコンピュータにはwdDoc.Activateが必要でした。それ以外の場合は Rangeプロパティは空です。間違ったカラムを太字たイニシャル後
  2. そのListFormatプロパティが
  3. 行インデックスを使用しなければならないので、元のテキストは、Rangeプロパティではなく、(コメントの内容である)範囲によって参照される
  4. (1の代わりに3)
+0

ありがとうございました。私はちょうど13のコメントを含む文書のテストを行った。コメントがヘッダーそのものを強調表示しているときに、ヘッダー番号が抽出されたように見えます(これは部分的に私が望むものなので、ありがとうございます:))。ただし、ヘッダー間のコメントは返されません。つまり、文書のセクション内にあるコメントのヘッダ番号(通常のテキストを強調するコメントなど)を取得しません。 –

+0

私は単語文書のすべての段落を実行する別のモジュールを作った。私はヘッダー番号を取得するためにこれを以前使用してみました。しかし、特定のコメントがどの段落を参照しているのか分かりません。 –

+0

コメントが「更新済み」の行を参照してください。 – z32a7ul

関連する問題