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のままという 状況です。
Excelの2002及び2003では、 正しく取得できないと言う問題があるようですが、2013ではS uperscriptだけが直っていない状況のままなのでしょう か?
取得は問題なく出来るんだけどなー。
結論を言えば、「True」を「msoTrue」 に変更したことで問題を回避することが出来ました。
If B.TextFrame.Characters(開始位置,文字 数).Font.Superscript = True Then
A.TextFrame.Characters(開始位置,文字 数).Font.Superscript = msoTrue
End If
0 件のコメント:
コメントを投稿