[[20170206152701]] 『Wordの蛍光ペン抽出』(CA) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『Wordの蛍光ペン抽出』(CA)

Wordのドキュメント内、蛍光ペンでマーキングされているテキストをExcelのマクロで抽出することは可能でしょうか。

ExcelからWordマクロを起動して抽出はできましたが、Wordマクロを使用せずに抽出ができればと思いました次第です。

ご存知の方いらっしゃればご教示いただきたく、よろしくお願いいたします。

< 使用 Excel:Excel2013、使用 OS:Windows7 >


Sub main()
    Dim wdObj As Object, h As String, t
    Set wdObj = CreateObject("Word.application")
    wordFile = ThisWorkbook.Path & "\sample.docx" 'Word文書のパス
    wdObj.Visible = True
    wdObj.Documents.Open wordFile
        For Each t In wdObj.ActiveDocument.Characters
            If t.HighlightColorIndex <> wdNoHighlight Then
                h = h & t
            End If
        Next t
    wdObj.Documents.Close
    wdObj.Quit
    MsgBox "蛍光ペン=" & h
End Sub
(mm) 2017/02/06(月) 16:57

mmさん

コードのご掲示ありがとうございます。

実行しましたところ、ハイライトカラーを探すForEachで繰り返し処理を行い固まってしまいました。
ですがヒントをいただいたような気がいたします。
ありがとうございます。

(CA) 2017/02/06(月) 17:28


>ExcelからWordマクロを起動して抽出はできましたが、

意味がよくわかりませんが
できているWordマクロをなぜ提示しないのでしょうか?
Excelから実行するように書き換えるだけなので
そのほうが解決がはやいと思います。

>ForEachで繰り返し処理を行い固まってしまいました。

文字数が多いのでしょうか?
Wordマクロだと検索を使うほうがよいかもしれません。
これで結果が問題なければ、Excelマクロに書き換えてみてください。

 Option Explicit

 Sub test()
    Dim aryl As Object
    Dim r As Range

    Set aryl = CreateObject("System.Collections.ArrayList")

    Set r = ActiveDocument.Content

    With r.Find
        .Highlight = True
        Do While .Execute
            aryl.Add r.Text
        Loop
    End With

    MsgBox Join(aryl.toarray, vbLf)

 End Sub

(マナ) 2017/02/06(月) 18:48


マナさん

コードのご掲示ありがとうございます。

Excelのマクロのみで完結したかったのは、実際に使用する方が多数になる予定の為、負荷やリスクを軽減できればと考えていた為です。

Excelマクロ実行

データを抜き出したいWordドキュメントを開く(GetOpenFilenameで開く)・データ書き出し

Excelシートに書き出しデータコピー

Wordドキュメント閉じる(Closeで閉じる)

抜き出したテキストを既存のフォーマットへ書き出し

という流れにしたかったのです。

Wordマクロ使用ですと、

Excel上のマクロ実行

Wordマクロドキュメントを開く

データを抜き出したいWordドキュメントを開く・データ書き出し

Excelシートに書き出しデータコピー

Wordドキュメント閉じる(Closeで閉じる)

抜き出したテキストを既存のフォーマットへ書き出し

となりWordマクロのデータが何らかの理由で消えてしまった場合、マクロが動かなくなってしまうと考えました。

Excelマクロも消えてれば終わりですが、少なくともリスクは減らせると考えた次第です。

コードの掲示をしなかったのは「Excelで完結できるコード」という条件と合わなかった為でした。
申し訳ございません。

以下、Wordマクロのコードになります。

Sub 蛍光ペンのテキスト抽出()

  Dim HLRange As Range
  Dim NWDoc As Document

  Application.ScreenUpdating = False

  Set HLRange = ActiveDocument.Range(0, 0)
  Set NWDoc = Documents.Add

  With HLRange.Find
    .Text = ""
    .Forward = True
    .Wrap = wdFindStop
    .Highlight = True
  End With

 Do While HLRange.Find.Execute = True And HLRange.Text <> ""

    If InStr(HLRange.Text, vbCr) Then
      If HLRange.Text <> vbCr Then
        HLRange.End = HLRange.End - 1
        With NWDoc.Range
          .InsertAfter HLRange.Text
          .InsertParagraphAfter
          HLRange.Collapse direction:=wdCollapseEnd
        End With
      Else
   End If
    Else
      With NWDoc.Range
        .InsertAfter HLRange.Text
        .InsertParagraphAfter
        HLRange.Collapse direction:=wdCollapseEnd
      End With
    End If

  Loop

  Set NWDoc = Nothing
  Set HLRange = Nothing

  Application.ScreenUpdating = True

End Sub

Excelマクロでの呼び出しは以下です。

sub テキスト書き出し()

  Dim wdApp As Word.Application

  Set wdApp = GetObject(, "word.application")
     wdApp.Run "蛍光ペンのテキスト抽出"

End Sub

(CA) 2017/02/07(火) 09:56


>Wordマクロのデータが何らかの理由で消えてしまった場合

どういうことか全くわかりません。

>「Excelで完結できるコード」

でも、Word文書を開いて、間接的に操作していますよね。
処理速度も遅くなるしメリットありますか?

こんな流れではだめですか。

1)Wordのマクロ実行
2)蛍光ペンを抽出したい文書を指定して開く
3)蛍光ペンを検索し、検索結果を配列に保存
4)2)で開いた文書を保存せずに閉じる
5)新規Word文書を作成
6)検索結果を5)の文書に書き込む

のように、Wordで完結させるか、

結果をExcelに貼り付けたいなら

5)新規Excelブックを作成
6)検索結果を5)のブックに書き込む

というような感じで
ExcelからWordを操作するのでなく
WordからExcelを操作したほうがよいと思います。

(マナ) 2017/02/07(火) 20:28


マナさん

ご返信ありがとうございます。

>Wordマクロのデータが何らかの理由で消えてしまった場合
どういうことか全くわかりません。

ネットワークサーバ上に誰でも閲覧できる場所があり、そこにマクロを置く予定なので、
誰かが誤って切り取りや削除をしてしまう可能性もあるという意味です。
理由は何であれ、扱うマクロのデータは1つの方がいいという程度にお考えください。

>「Excelで完結できるコード」
でも、Word文書を開いて、間接的に操作していますよね。
処理速度も遅くなるしメリットありますか?

はい、今はWordマクロも使用している状態なのですが、Wordマクロを使用せずにExcelのマクロのみを使用したかっただけです。
書き出しデータを開いているので、確かに間接的に操作はしてますが、これは開かざるをえないので処理が遅くなっても仕方ないと考えておりました。

最終的にはExcelの既存のフォーマットへ書き出しするのでExcelのマクロでと思っていたのですが、Wordマクロで完結させる方法も考えたいと思います。

アドバイスありがとうございました。
(CA) 2017/02/08(水) 09:23


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.