2018年1月15日月曜日

【Excel】VBA マクロでオートシェイプ内の上付き文字を設定しても反映されない問題。【VBA】

VBAでフォントの装飾を変更するコードを書いていたのですが、どうにも摩訶不思議な現象に遭遇しました。

エクセルを使用している方なら経験があると存じますが、セルに対して装飾を施すことが出来ます。

セル内の文字列を個別に対象にすることもでき、それをVBAで装飾を施す場合

 Range(セル情報の位置["A1"]).Characters(開始位置,文字数).Font.Superscript = True

こんな感じです。

オートシェイプの文字列もセルと同様のことができますので、VBAでやろうとしたのですが、なぜか反映しないという事象が発生しました。
(例:Aというオートシェープの文字をBというオートシェイプに装飾含めてコピーするというコード)








コートで書くと下記の通り。(上付き文字)

A.TextFrame.Characters(開始位置,文字).Font.Superscript = B.TextFrame.Characters(開始位置,文字).Font.Superscript


図にあるとおり、下付き文字と打ち消し線は問題なくできるという不思議状況です。
コピー元Bの上付き状態を(IF)で判定する分には問題なく取得できます。
なので
If B.TextFrame.Characters(開始位置,文字).Font.Superscript = True Then
A.TextFrame.Characters(開始位置,文字).Font.Superscript = True
 End If
と言うコードに変えてやったのですが、コピー先の「A.TextFrame.Characters(開始位置,文字数).Font.Superscript」はFalseのままという状況です。

Excel2002及び2003では、正しく取得できないと言う問題があるようですが、2013ではSuperscriptだけが直っていない状況のままなのでしょうか?
取得は問題なく出来るんだけどなー。

結論を言えば、「True」を「msoTrueに変更したことで問題を回避することが出来ました。

If B.TextFrame.Characters(開始位置,文字).Font.Superscript = True Then
A.TextFrame.Characters(開始位置,文字).Font.Superscript = msoTrue
 End If

ただ、これは明らかに「バグ」だよなぁ。

0 件のコメント:

コメントを投稿