「EXCEl VBA .TextFrame.TextRange」
「.TextFrame.TextRange.Text エクセルVBA」
といった検索キーワードで、アクセスがあることに気が付きました。
Excel VBAのTextFrameオブジェクトが、TextRangeプロパティを持っていると誤解している方による検索です。
Excel VBAのTextFrameオブジェクトにTextRangeプロパティはない
結論からお伝えすると、PowerPoint VBAやWord VBAと違い、Excel VBAのTextFrameオブジェクトにTextRangeプロパティはありません。
拙著『いちばんやさしいPowerPoint VBAの教本』のChapter 6でもお伝えしているとおり、PowerPoint VBAの図形枠を表すTextFrameオブジェクトには、文字列範囲を表すTextRangeオブジェクトを取得するための、TextRangeプロパティが用意されています。
Word VBAの場合も、戻り値がRangeオブジェクトであるという違いはあるものの、TextFrameオブジェクトにTextRangeプロパティがあります。
これらをご存知だと、Excel VBAのTextFrameオブジェクトにもTextRangeプロパティがあると考えてしまうかもしれませんが、Excel VBAのTextFrameオブジェクトにTextRangeプロパティはありません。
オブジェクトブラウザーのクラスペインでTextFrameを選択しても、メンバーペインにTextRangeは見当たりません。
クラスペインにもTextRangeオブジェクトは存在しません。
ですから、
MsgBox ActiveSheet.Shapes(1).TextFrame.TextRange.Text
を実行すると、「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」実行時エラーが発生します。
Excel VBAでTextRrangeの代わりはCharacters
ただし、Excel VBAに文字列を表すPowerPoint VBAのTextRangeのようなオブジェクトがないのかというと、そんなことはありません。
拙著P.233のワンポイント「TextRangeはExcel VBAのCharactersの発展形」でお伝えしているCharactersオブジェクトが、文字列を表します。
PowerPoint VBAのTextRangeよりも機能的には劣りますが。
文字列を表すCharactersオブジェクトは、TextFrameオブジェクトに用意されているCharactersメソッド等で取得できます。
CharactersオブジェクトのTextプロパティを使った、
MsgBox ActiveSheet.Shapes(1).TextFrame.Characters.Text
を実行すると、アクティブシートに存在する1つ目の図形の文字列がメッセージボックスに表示されます。
TextFrame2オブジェクトにはTextRangeプロパティがある
もうひとつ、Office 2007で登場したTextFrame2オブジェクトには、TextRangeプロパティが用意されています。
実行時エラーの発生した、
MsgBox ActiveSheet.Shapes(1).TextFrame.TextRange.Text
によく似た、
MsgBox ActiveSheet.Shapes(1).TextFrame2.TextRange.Text
でも、アクティブシートに存在する1つ目の図形の文字列がメッセージボックスに表示されます。
ただし注意点があります。
TextFrame2オブジェクトに用意されているTextRangeプロパティの戻り値はTextRangeオブジェクトではなく、TextRange2オブジェクトである点です。
TextRange2オブジェクトは、PowerPoint VBAのTextRangeオブジェクトとかなり似ていますが、プロパティと取得できるオブジェクトの名前が微妙に異なるので、注意が必要なオブジェクトです。
MicrosoftがTextRange2オブジェクトを取得するプロパティの名前を、TextRange2にしておいてくれれば良かったのにと私は思っています。
最終更新日時:2020-03-26 06:50
Home » エクセルマクロ・Excel VBAの使い方 » 図形内文字列 » Excel VBAのTextFrameにTextRangeはありません