「理科ならではのPowerpoint VBA」
という記事のコメント欄に、使ったことのないメソッド・プロパティについて言及されているのに気づきました。
PowerPoint.TextRange / Office.TextRange2 オブジェクトのRunsメソッド(全引数省略)を使用すると、元のTextRangeを書式毎に分解したTextRangeが得られます。
なかなか面白い動きをするメソッド・プロパティで、将来使い道があるような予感もあるので、自分用の備忘録として記事にさせていただきます。
TextRange.Runs・TextRange2.Runsとは
PowerPointライブラリのTextRangeオブジェクトのRunsメソッドや、
OfficeライブラリのTextRange2オブジェクトのRunsプロパティを、
引数を指定せずに呼ぶと、元の文字列に設定された書式ごとに分割されたTextRangeオブジェクトやTextRange2オブジェクトを単独のオブジェクトとして持つ、コレクションとしてのTextRangeオブジェクトやTextRange2オブジェクトが返されます。
TextRangeやTextRange2は、その単独のオブジェクトも同じくTextRangeやTextRange2であるコレクションでもあるオブジェクトである、という特徴がよく表れた挙動です。
PowerPoint.TextRangeオブジェクトのRunsメソッドの動きを確認するサンプルマクロ
例えば、アクティブなプレゼンテーションの、1枚目のスライドの1つ目のShapeに「2H2O」と入力して、下図のように「H」と「O」の間の「2」だけに下付き書式を設定しておいて、
以下のSubプロシージャを実行すると、PowerPoint.TextRangeオブジェクトのRunsメソッドの動きを確認できます。
Dim trng As PowerPoint.TextRange Set trng = _
ActivePresentation.Slides(1).Shapes(1) _
.TextFrame.TextRange.Runs
Stop
End Sub
オブジェクト変数にTextRangeオブジェクトのRunsメソッドの戻りをセットして、ステップ実行に入るだけのプロシージャです。
変数宣言は通常、
Dim trng As TextRange
でいいのですが、このあとのプロシージャとの比較を明確にするために、
Dim trng As PowerPoint.TextRange
とライブラリから指定する形にしています。
ローカルウィンドウの確認
Stopステートメントでステップ実行に入ったところで、メニュー[表示]-[ローカルウィンドウ]からローカルウィンドウを表示させると、下図のような状態になっているはずです。
元の「2H2O」は、「H」と「O」の間の「2」だけが下付きになっているので、「2H」「2」「O」という文字列をそれぞれ持つ3つのTextRangeオブジェクトがItemとして返されています。
このうち「Item 1」をクリックして展開すると、下図のようにTextプロパティには「2H」が、
「Item 2」をクリックして展開すると、下図のようにTextプロパティに「2」が、
セットされているのがそれぞれ見えます。
もちろん「Item 3」のTextプロパティには「O」がセットされているはずです。
また、「Item 2」の「Font」のSubscriptプロパティだけに「msoTrue」が、
セットされていることも見えます。
このように「2H2O」という文字列を持つTextRangeが、書式ごとに分解されることがローカルウィンドウを使えばよく見えます。
Office.TextRange2オブジェクトのRunsプロパティの動きを確認するサンプルマクロ
OfficeライブラリのTextRange2オブジェクトのRunsプロパティの動きは、以下のSubプロシージャで確認できます。
Dim trng2 As Office.TextRange2 Set trng2 = _
ActivePresentation.Slides(1).Shapes(1) _
.TextFrame2.TextRange.Runs
Stop
End Sub
同じくStopステートメントの箇所でローカルウィンドウを見れば、先ほどと同じようにTextRange2オブジェクトRunsプロパティの動きを確認できます。
コードは先のTextRangeオブジェクトのRunsメソッドを確認するプロシージャとよく似ていますが、以下の部分が違います。
変数宣言を、
Dim trng2 As Office.TextRange2
とOfficeライブラリのTextRange2型で宣言しているところと、このオブジェクト変数・trng2に戻りをセットするオブジェクト式が、先ほどのプロシージャでは、
.TextFrame.TextRange.Runs
となっていた部分が、
.TextFrame2.TextRange.Runs
になっていることが違います。
単なる文字としてみると、「TextFrame」に「2」がついているかどうかだけの違いですが、オブジェクトに注目するとまったく別物です。
Office.TextFrame2オブジェクトのTextRangeプロパティの戻りは、オブジェクトブラウザーで確認すればわかるとおり、TextRange2オブジェクトです。
プロパティはTextRange、戻りのオブジェクトはTextRange2と、似ているけれど微妙に違うのが、要注意です。
最終更新日時:2018-10-02 04:54
- Newer:VBAのSplitでは1文字ずつの配列にならない
- Older:PowerPoint VBAでグラフだけを選択する
Home » パワーポイントマクロ・PowerPoint VBAの使い方 » TextFrame・TextRange » TextRange.RunsメソッドとTextRange2.Runsプロパティ