Home » エクセルマクロ・Excel VBAの使い方 » Shapeオブジェクト » Shape内に文字列が存在するかどうかを判定する-TextFrame2.HasText

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

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

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

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

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

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

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 shp

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 shp

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

おすすめです。

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » Shapeオブジェクト » Shape内に文字列が存在するかどうかを判定する-TextFrame2.HasText

TrackBack:0

TrackBack URL

Home » エクセルマクロ・Excel VBAの使い方 » Shapeオブジェクト » Shape内に文字列が存在するかどうかを判定する-TextFrame2.HasText

「Shapeオブジェクト」の記事一覧

検索


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

.