2022年9月25日日曜日

VBAで図形などのオートシェープを扱う場合、文字を入力する箱みたいに図形扱いされているのが面白い ー TextBox(VBA-Shape)

御文章箱(仏具)
     
エクセルでワークシートに設けたテキストボックスは、奥深いものがあります。
こさえるには、[挿入]タブから[テキストボックス]のメニューをクリック。

後は、ワークシートにマウスを自在にドラッグさせて、ボックス枠を設けます。
次に、書体の書式などは、タブから設定できるので、便利に使い始められます。

普通なら、この程度で使っても全く問題はありませんが、VBAで関連付けたい。
例えば、テキストボックス内に文字列を挿入したり、削除したりする操作です。

 ActiveSheet.Shapes(”TextBox1”).TextFrame2.TextRange.Text = "あいう"
 ActiveSheet.Shapes(”TextBox1”).TextFrame.Characters.Text = "あいう"

これらのコードは、どちらも文字列が挿入できたり、書式設定もできたりする。
ただ、"TextFrame"と"TextFrame2"で設定するコードの記述は、かなり違うな。

Sub TxtFrmt() ’TextFrameで書式を設定できるケース
 With ActiveSheet.Shapes("TextBox 1").TextFrame
   .Characters.Text = "あいう"
   .Characters.Font.Name = "MS ゴシック"
   .Characters.Font.Size = 12 'フォントサイズ
   .Characters.Font.ColorIndex = 3 '赤色、黒色は1、青色は5
   .Characters.Font.Underline = xlUnderlineStyleSingle '下線
   .Characters.Font.Bold = True '下線
   .HorizontalAlignment = xlHAlignCenter '水平位置中央揃え
 End With
End Sub 

Sub TxtFrmt() 'TextFrame2で書式を設定できるケース
 With ActiveSheet.Shapes("TextBox 1").TextFrame2.TextRange
   .Text = "あいう"
   .Font.Name = "MS ゴシック"
   .Font.Size = 18 'フォントサイズ
   .ParagraphFormat.Alignment = msoAlignCenter '水平位置中央揃え
 End With
End Sub

比較すれば、"TextFrame2"は、"TextFrame"より書式の設定に自由度が少ない。
自分で試してみただけですが、文字列で水平上下の位置設定も記述が異なるな。

機能的には、"TextFrame2"に拡張性を持たせたようですが、下位互換はない。
しかも、この拡張性の意味は、エクセルよりパワーポイントを想定したらしい。

なので、エクセルでテキストボックスを使うなら、"TextFrame"でいいだろう。
この他、テキストボックスの文字列を削除する設定で、挙動に違いがあります。

 ActiveSheet.Shapes("TextBox 1").TextFrame.Characters.Delete
 ActiveSheet.Shapes("TextBox 1").TextFrame2.DeleteText

確かに、両方とも文字列は削除されますが、前者は文字列だけが削除されます。
ところが困ったことに、後者は設定されたフォントの書式までが削除されます。

なので、設定した書式を残して文字列を削除するには、前者をお勧めしますな。
というわけで、たかがテキストボックス、されどテキストボックスなのでした。

ちなみに、ワークシート上のテキストボックスに、パワーポイントで使う設定値をいれて、 ”.ParagraphFormat.Alignment = ppAlignCenter”を実行させてみてもエラーが出るだけなので、エクセルを使うのであれば、”TextFrame”に関連するプロパティだけでシェイプを操作しても、十分だとも思ったのでした。



いいねと思ったら、三つポチっとね!
にほんブログ村 スキースノボーブログへにほんブログ村 スキースノボーブログ スキーへにほんブログ村 旅行ブログ 旅日記・旅の思い出へ
にほんブログ村    にほんブログ村      にほんブログ村 



0 件のコメント:

コメントを投稿