Home » エクセルマクロ・Excel VBAの使い方 » 図形内文字列 » VBAでShape内に文字列が存在するかを判定する-TextFrame2.HasTextプロパティ

VBAでShape内に文字列が存在するかを判定する-TextFrame2.HasTextプロパティ

対象:Excel2007, Excel2010, Excel2013, Windows版Excel2016

Shape内に文字列が存在するかどうかを判定する-TextFrame2.HasText

「excel vba characters.text を取得できるautoshapetype」
という検索で、このサイト『インストラクターのネタ帳』へのアクセスがありました。

Shape内の文字列を扱うExcel VBAのコードを書いている方による検索です。

Characters.Textを取得できるShapeとは

Shape内の文字列を扱うExcelマクロを作ったことのない方には、
「excel vba characters.text を取得できるautoshapetype」
という検索をなさった方が、何を求めていたのか理解し辛いでしょうから、エラーの発生するマクロからご紹介します。

例えば、文字列の入力されているテキストボックスがワークシート上に存在する状態で以下のマクロを実行すると、テキストボックス内の文字列がメッセージボックスに表示されます。

Sub Shape内の文字列を取得する_Characters()
 Dim shp As Shape
 For Each shp In ActiveSheet.Shapes
  MsgBox shp.TextFrame.Characters.Text
 Next
End Sub

ところが、図形の一種である[直線]などが存在している状態で、

Shape内に文字列が存在するかどうかを判定する-TextFrame2.HasText

上記のマクロを実行すると、
「実行時エラー'438': オブジェクトは、このプロパティまたはメソッドをサポートしていません。」
というエラーが発生してしまいます。
[直線]などの図形にはそもそもテキストを追加できませんから、TextFrameオブジェクトのCharactersメソッドを実行しようとするとエラーが発生してしまうのです。

「excel vba characters.text を取得できるautoshapetype」
という検索をなさった方は、このエラーを回避するためにShapeオブジェクトのAutoShapeTypeプロパティを使おうと考えたのではないかと、私は推測しています。

Shape内に文字列が存在するかどうかを判定する-TextFrame2.HasText

TextFrame2オブジェクトで文字列を取得するサンプルマクロ

2007以降のExcelならば、Charactersオブジェクトを使うよりも、TextFrame2オブジェクトを使うほうが便利です。
Office 2007からは、図形まわりがいろいろと変更になっていて、VBA側から見ると新しくTextFrame2オブジェクトが扱えるようになっています。

以下のマクロならば、先ほどエラーが発生した[直線]などの図形が存在していたとしても、実行時エラーは発生しません。

Sub Shape内の文字列を取得する_TextFrame2()
 Dim shp As Shape
 For Each shp In ActiveSheet.Shapes
  If shp.TextFrame2.HasText Then
   MsgBox shp.TextFrame2.TextRange.Text
  End If
 Next
End Sub

Office 2007から使えるようになっているTextFrame2オブジェクトのHasTextプロパティを使うと、

Shape内に文字列が存在するかどうかを判定する-TextFrame2.HasText

Shape内に文字列が存在するかどうかを判定することができるのです。
TextFrame2.HasTextプロパティは、TextFrame.Charactersメソッドと違って、テキストを設定できない図形を表すShapeオブジェクトでも呼ぶことができるのです。

2003以前のExcelでも同じマクロを使いたいのであればTextFrame2オブジェクトは使えませんけれど、2007以降ならばCharactersオブジェクトよりも、

Shape内に文字列が存在するかどうかを判定する-TextFrame2.HasText

便利なTextFrame2オブジェクトのほうが、

Shape内に文字列が存在するかどうかを判定する-TextFrame2.HasText

おすすめです。

最終更新日時:2021-12-17 07:09

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » 図形内文字列 » VBAでShape内に文字列が存在するかを判定する-TextFrame2.HasTextプロパティ

「図形内文字列」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.