Word (VBA)

Word VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Microsoft 365)
Wordファイルからすべてのテキストを取得
投稿日時: 23/10/02 17:31:37
投稿者: ストロベリー

Wordファイル内のテキストをすべて取得するにはどうしたらいいでしょうか。
テキストボックス、SmartArt、ヘッダー、フッター、コメントなどテキストを持つことができるオブジェクトをすべて対象としたいです。
Document.StoryRangesを使いましたが、すべてのテキストを取れませんでした。
 
ご教授いただければ幸いです。
よろしくお願いします。

回答
投稿日時: 23/10/03 11:44:38
投稿者: Suzu

全て と 一言で言いますが、
それぞれ、別のタイプのオブジェクトであり、属するコレクションも違います。
 
テキストを得るにしても、それぞれの タイプに合わせて テキストを取得する必要があり
 
希望しているであろう、これだけやっておけば全テキストが取得できる の様な方法はありません。
 
とりあえず、
ご質問文でもあった、StoryRanges を使い、本文、コメント、ヘッダー、フッターの取得
テキストボックスと、SmartArt 内のテキストを取得するまでのサンプルです。
 

Sub Sumple()
  Dim Doc As Document
  Dim Str As StoryRanges
  Dim Rng As Range
  Dim Shp As Shape
  Dim IlShp As InlineShape
  Dim Nod As SmartArtNode
  Dim i As Long

  Set Doc = Application.Documents(1)
  Set Str = Doc.StoryRanges

  For Each Rng In Str
    i = i + 1
    Debug.Print i & vbTab & Rng.Text
  Next

  'Shape テキストボックス
  For Each Shp In Doc.Shapes
    Debug.Print Shp.TextFrame.TextRange.Text
  Next

  'SmartArt
  For Each IlShp In Doc.InlineShapes
    For Each Nod In IlShp.SmartArt.Nodes
      Debug.Print Nod.TextFrame2.TextRange.Text
    Next
  Next
End Sub

 
SmartArt内に更に子が存在するデザイン(Ex.縦方向リスト)だと、
更に子ノードを取得する必要があります。
その辺りは、ご自身で修正してください。

投稿日時: 23/10/03 15:53:35
投稿者: ストロベリー

Suzu 様
 
サンプルコードを示していただき、ありがとうございます。
また教えていただきたいですが、
 
1.TextFrameとTextFrame2の違いは何でしょうか?
TextFrameはよく見かけますが、TextFrame2がありません。
SmartArt以外でTextFrame2を使うオブジェクトがまだあったりしますか?
 
2.DocumentのRangeやContentを取得する時は、MainTextStoryの内容のみ出てきます。
DocumentのShapesもInlineShapesもMainTextStoryに存在するものだけのようで、
ヘッダーやフッターなどにもしShapeがあったら、ヘッダーやフッターのRange内のShapesもInlineShapesをチェックすればいいでしょうか?
 
3,テキストを持てるオブジェクトで、知っているのは本文、コメント、ヘッダー、フッター、テキストボックスとSmartArt位で、他にはどんなものがありますでしょうか?
 
すみませんが、よろしくお願いします。

回答
投稿日時: 23/10/03 16:27:10
投稿者: Suzu

調べた上でのご質問でしょうか?
 
当方も全てを網羅できている訳ではありません。
回答をするにも、調べて回答をします。
 
 
ご自身で、調べたり、テストしてみた方が早い事もあります。
 
1.SmartArt以外でTextFrame2を使うオブジェクトがまだあったりしますか?
→ オブジェクトブラウザ で、TextFrame2 をキーワードで 対象の ライブラリ、クラスが判ります。
 
2.ヘッダーやフッターのRange内のShapesもInlineShapesをチェックすればいいでしょうか?
→ テストしてみてください。
 
 
3,テキストを持てるオブジェクトで、 〜〜 他にはどんなものがありますでしょうか?
→ 1.と同様、オブジェクトブラウザ にて、TEXT をキーワードに検索 メンバーを昇順に並べ替え

投稿日時: 23/10/03 17:25:36
投稿者: ストロベリー

ご回答ありがとうございました。