[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『Wordの蛍光ペン抽出』(CA)
Wordのドキュメント内、蛍光ペンでマーキングされているテキストをExcelのマクロで抽出することは可能でしょうか。
ExcelからWordマクロを起動して抽出はできましたが、Wordマクロを使用せずに抽出ができればと思いました次第です。
ご存知の方いらっしゃればご教示いただきたく、よろしくお願いいたします。
< 使用 Excel:Excel2013、使用 OS:Windows7 >
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
コードのご掲示ありがとうございます。
実行しましたところ、ハイライトカラーを探すForEachで繰り返し処理を行い固まってしまいました。
ですがヒントをいただいたような気がいたします。
ありがとうございます。
(CA) 2017/02/06(月) 17:28
意味がよくわかりませんが
できている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
どういうことか全くわかりません。
>「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.