TextFrame2オブジェクトを経由したFon2.Strikeプロパティをご紹介しました。
Fon2.Strikeプロパティを使えば、図形内文字列に二重取り消し線も引けるのですが、これにより取り消し線が引かれているかをどうかをVBAで判定する場合、注意が必要になっています。
通常の取り消し線でも二重取り消し線でも、Font.Strikethroughプロパティの戻り値がTrueになってくれればありがたいのですが、
残念ながらそうではないためです。
図形内文字列の取り消し線を判定するExcelマクロ
下図のように、
取り消し線のない図形
通常の取り消し線を引いた図形
二重取り消し線を引いた図形
が存在するワークシートがアクティブな状態で、
以下のExcelマクロを実行してください。
Dim shp As Shape
For Each shp In ActiveSheet.Shapes
With shp
Debug.Print _
.TextFrame.Characters.Text & vbTab & _
.TextFrame.Characters.Font.Strikethrough & vbTab & _
.TextFrame2.TextRange.Font.Strike
End With
Next
End Sub
アクティブシートの全図形にFor Each~Nextループを回し、
図形内に入力されている文字列、
.TextFrame.Characters.Text & vbTab & _
Font.Strikethroughプロパティの戻り値、
.TextFrame.Characters.Font.Strikethrough & vbTab & _
Font2.Strikeプロパティの戻り値を、
.TextFrame2.TextRange.Font.Strike
それぞれDebug.Printしているマクロです。
マクロの実行結果
上記マクロを実行した結果、以下のように出力されます。
取り消し線なし False 0
取り消し線あり True 1
二重取り消し線 False 2
「取り消し線なし」「取り消し線あり」については問題ありませんが、二重取り消し線を引いた図形のFont.Strikethroughプロパティの出力結果に注目してください。
.TextFrame.Characters.Font.Strikethrough & vbTab & _
二重取り消し線の場合、Font.StrikethroughプロパティがFalseになってしまうです。
取り消し線なし False 0
取り消し線あり True 1
二重取り消し線 False 2
Font.Strikethroughプロパティで判定できるのは、(二重取り消し線ではない)通常の取り消し線が引かれているかどうかだけということです。
Microsoftが、Font2オブジェクトを導入したのはExcel 2007のときですが、そのときに既存のFontオブジェクトには手を入れなかったということでしょう。
Microsoft側の方針(気持ち)を理解はできますが、二重取り消し線でもFont.Strikethroughプロパティの戻り値をTrueにしてくれても良かったのではないかと、私は感じます。
最終更新日時:2024-03-28 06:26
- Newer:Access VBAで既に開いているWord文書を順番に取得する
- Older:Word VBAでセクションを選択する
Home » エクセルマクロ・Excel VBAの使い方 » 図形内文字列 » 取り消し線をExcel VBAで判定するには注意が必要