簡単なPowerPointマクロを作っているときに、With文にどこまで含めるかによって、挙動が異なる現象に遭遇しました。
挙動が異なる真の原因はまだ言語化できませんが、現象だけをとりあえず備忘録として記事にしておきます。
文字列書式を初期化するPowerPointマクロ
文字列の入力されている図形を選択しておいて、以下の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
文字列書式を初期化できます。
With ActiveWindow.Selection.ShapeRange.TextFrame2
.TextRange.Cut
.TextRange.PasteSpecial msoClipboardFormatPlainText
End With
End Sub
文字列書式初期化マクロで挙動が異なるケース
ところがWith文の書き方を以下のようにすると、いずれも予想外の挙動をします。
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
- Newer:Intersect() Is Nothingの逆
- Older:ExcelでADO・ADODBへの参照設定を
Home » パワーポイントマクロ・PowerPoint VBAの使い方 » TextFrame・TextRange » With文に含む範囲で挙動が変わることもある