【Word VBA】文書中のテキストボックス内の文字列を別紙に書出す(その2)

5年ほど前に、「【コード】文書中のテキストボックス内の文字列を別紙に書出す」を紹介しました。

当時私が理解していた範囲内で書いた記事ですが、改善の余地があったので一部だけですが修正します。

このマクロでできること

「【コード】文書中のテキストボックス内の文字列を別紙に書出す」と同じです。

グループ化されたテキストボックスは処理対象ですが、描画キャンバス内のテキストボックスは処理対象外です。

マクロの解説

前回のマクロでは、文字列を含まないオブジェクトから文字列を取得しようとしたときにエラーが発生しており、そのエラー処理をしてました。

今回のマクロでは、20行目と29行目のHasTextプロパティにて、処理対象のオブジェクトが文字列を含むのかどうかを判定しています。

このことで、エラーが発生しなくなりました。

マクロ


Sub テキストボックスのテキスト抽出2()

 Dim aShape As Shape   '図
 Dim grpShape As Shape  'グループ化された図
 Dim myText As String  '抽出する文字列
 Dim actDoc As Document '処理対象の文書
 Dim myDoc As Document  '新規で開いた文書

 Set actDoc = ActiveDocument
 Set myDoc = Documents.Add

 actDoc.Activate

 For Each aShape In ActiveDocument.Shapes
  Select Case aShape.Type
   Case msoGroup
   'グループ化されている場合の処理
    For Each grpShape In aShape.GroupItems
     '図中にテキストの有無の判定
     If grpShape.TextFrame.HasText = True Then
      myText = grpShape.TextFrame.TextRange.Text
      myDoc.Range.InsertAfter myText
     End If
    Next

   Case Else
   'それ以外の場合の処理
    '図中にテキストの有無の判定
    If aShape.TextFrame.HasText = True Then
     myText = grpShape.TextFrame.TextRange.Text
     myDoc.Range.InsertAfter myText
    End If

  End Select
 Next

 myDoc.Activate
 Set myDoc = Nothing

End Sub

関連記事

トップへ戻る