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