Home » エクセルマクロ・Excel VBAの使い方 » 図形内文字列 » Excel VBAのTextFrameにTextRangeはありません

Excel VBAのTextFrameにTextRangeはありません

動作検証バージョン:64bit Windows 10 Pro + 32bit Excel(バージョン2002 ビルド12527.20278 Microsoft Store)

「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はありません

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

検索


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

.