Home » パワーポイントマクロ・PowerPoint VBAの使い方 » TextFrame・TextRange » TextRange.RunsメソッドとTextRange2.Runsプロパティ

TextRange.RunsメソッドとTextRange2.Runsプロパティ

対象:PowerPoint2007, PowerPoint2010, PowerPoint2013, Windows版PowerPoint2016
PowerPoint VBAについて書かれた、
理科ならではのPowerpoint VBA
という記事のコメント欄に、使ったことのないメソッド・プロパティについて言及されているのに気づきました。
PowerPoint.TextRange / Office.TextRange2 オブジェクトのRunsメソッド(全引数省略)を使用すると、元のTextRangeを書式毎に分解したTextRangeが得られます。

なかなか面白い動きをするメソッド・プロパティで、将来使い道があるような予感もあるので、自分用の備忘録として記事にさせていただきます。

TextRange.Runs・TextRange2.Runsとは

PowerPointライブラリのTextRangeオブジェクトのRunsメソッドや、

 TextRange.RunsメソッドとTextRange2.Runsプロパティ

OfficeライブラリのTextRange2オブジェクトのRunsプロパティを、

 TextRange.RunsメソッドとTextRange2.Runsプロパティ

引数を指定せずに呼ぶと、元の文字列に設定された書式ごとに分割されたTextRangeオブジェクトやTextRange2オブジェクトを単独のオブジェクトとして持つ、コレクションとしてのTextRangeオブジェクトやTextRange2オブジェクトが返されます。

[スポンサードリンク]

TextRangeやTextRange2は、その単独のオブジェクトも同じくTextRangeやTextRange2であるコレクションでもあるオブジェクトである、という特徴がよく表れた挙動です。

PowerPoint.TextRangeオブジェクトのRunsメソッドの動きを確認するサンプルマクロ

例えば、アクティブなプレゼンテーションの、1枚目のスライドの1つ目のShapeに「2H2O」と入力して、下図のように「H」と「O」の間の「2」だけに下付き書式を設定しておいて、

 TextRange.RunsメソッドとTextRange2.Runsプロパティ

以下のSubプロシージャを実行すると、PowerPoint.TextRangeオブジェクトのRunsメソッドの動きを確認できます。

Sub 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ステートメントでステップ実行に入ったところで、メニュー[表示]-[ローカルウィンドウ]からローカルウィンドウを表示させると、下図のような状態になっているはずです。

 TextRange.RunsメソッドとTextRange2.Runsプロパティ

元の「2H2O」は、「H」と「O」の間の「2」だけが下付きになっているので、「2H」「2」「O」という文字列をそれぞれ持つ3つのTextRangeオブジェクトがItemとして返されています。

このうち「Item 1」をクリックして展開すると、下図のようにTextプロパティには「2H」が、

 TextRange.RunsメソッドとTextRange2.Runsプロパティ

「Item 2」をクリックして展開すると、下図のようにTextプロパティに「2」が、

 TextRange.RunsメソッドとTextRange2.Runsプロパティ

セットされているのがそれぞれ見えます。
もちろん「Item 3」のTextプロパティには「O」がセットされているはずです。

また、「Item 2」の「Font」のSubscriptプロパティだけに「msoTrue」が、

 TextRange.RunsメソッドとTextRange2.Runsプロパティ

セットされていることも見えます。
このように「2H2O」という文字列を持つTextRangeが、書式ごとに分解されることがローカルウィンドウを使えばよく見えます。

Office.TextRange2オブジェクトのRunsプロパティの動きを確認するサンプルマクロ

OfficeライブラリのTextRange2オブジェクトのRunsプロパティの動きは、以下のSubプロシージャで確認できます。

Sub TextRange2オブジェクトのRunsプロパティの動きを確認する()
 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.RunsメソッドとTextRange2.Runsプロパティ

プロパティはTextRange、戻りのオブジェクトはTextRange2と、似ているけれど微妙に違うのが、要注意です。

最終更新日時:2018-10-02 04:54

[スポンサードリンク]

Home » パワーポイントマクロ・PowerPoint VBAの使い方 » TextFrame・TextRange » TextRange.RunsメソッドとTextRange2.Runsプロパティ

「TextFrame・TextRange」の記事一覧

検索


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

.