Home » パワーポイントマクロ・PowerPoint VBAの使い方 » TextFrame・TextRange » With文に含む範囲で挙動が変わることもある

With文に含む範囲で挙動が変わることもある

動作検証バージョン:Windows版PowerPoint(バージョン1809 ビルド10827.20150)

簡単なPowerPointマクロを作っているときに、With文にどこまで含めるかによって、挙動が異なる現象に遭遇しました。

挙動が異なる真の原因はまだ言語化できませんが、現象だけをとりあえず備忘録として記事にしておきます。

[スポンサードリンク]

文字列書式を初期化するPowerPointマクロ

文字列の入力されている図形を選択しておいて、以下のSubプロシージャを実行すると、文字列書式が初期化されます。
Sub 文字列書式を初期化する()
 With ActiveWindow.Selection.ShapeRange.TextFrame
  .TextRange.Cut
  .TextRange.PasteSpecial ppPasteText
 End With
End Sub

選択されている図形の、
  With ActiveWindow.Selection.ShapeRange.TextFrame
文字列を切り取って、
   .TextRange.Cut
書式なしテキストで貼り付けすることで、
   .TextRange.PasteSpecial ppPasteText
文字列書式を初期化できます。

TextRange2オブジェクトを使った以下のSubプロシージャでも、同じ挙動をします。
Sub 文字列書式を初期化する2()
 With ActiveWindow.Selection.ShapeRange.TextFrame2
  .TextRange.Cut
  .TextRange.PasteSpecial msoClipboardFormatPlainText
 End With
End Sub

文字列書式初期化マクロで挙動が異なるケース

ところがWith文の書き方を以下のようにすると、いずれも予想外の挙動をします。

Sub 文字列書式を初期化する_vbVerticalTabが付与されてしまう()
 With ActiveWindow.Selection.ShapeRange.TextFrame.TextRange
  .Cut
  .PasteSpecial ppPasteText
 End With
End Sub

Sub 文字列書式を初期化する2_vbVerticalTabが付与されてしまう()
 With ActiveWindow.Selection.ShapeRange.TextFrame2.TextRange
  .Cut
  .PasteSpecial msoClipboardFormatPlainText
 End With
End Sub

先述のSubプロシージャとの違いは、With文にどこまで含まれているかです。

With文に.TextRangeまで含む形にすると、書式なしテキストの貼り付けを行った時点で、文字列の末尾にvbVerticalTab・Chr(11)が付与されてしまい、文字列が1行上に移動してしまいます。

Excelの場合はどちらも同じ

ちなみにExcelの場合は、
  With ActiveWindow.Selection.ShapeRange.TextFrame2
  With ActiveWindow.Selection.ShapeRange.TextFrame2.TextRange
いずれも同じように動きます。

ExcelにはTextRange2オブジェクトはありますけれど、TextRangeオブジェクトは存在しないため、
  With ActiveWindow.Selection.ShapeRange.TextFrame
  With ActiveWindow.Selection.ShapeRange.TextFrame.TextRange
はもちろん動きません。

最終更新日時:2018-11-06 04:09

[スポンサードリンク]

Home » パワーポイントマクロ・PowerPoint VBAの使い方 » TextFrame・TextRange » With文に含む範囲で挙動が変わることもある

「TextFrame・TextRange」の記事一覧

検索


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

.