« 秒の小数部分の表示形式 | トップページ | テキストボックスを作成する2 »

2011年7月10日 (日)

テキストボックスを作成する

セルに関係なく文字を表示したいときは
ワードアートを使うしかないと思っていましたが、
テキストボックスというものがあるのですね。
下の画像は[図形描画]ルーツボックスですが、
テキストボックスは矢印のマークです。
Vba20110710a_2

これ、横組みか縦組みかを選択するだけのボタンだと思ってました。
横組みのテキストボックスか、
縦組みかのテキストボックスを選択するボタンでした。

文字をVBAで作成して遊びたいと考えていて、
その為にShapeについて調べています。
今回はテキストボックスを作成、変更などについて
やっていきます。

まずはテキトーにテキストボックスを作成して、
マクロ自動記録します。

自動記録を少し加工したコードはこちら

テキストボックスを作成コード1:

Sub macro110710a()
'テキストボックス作成
'マクロ自動記録から

    'テキストボックス作成
    ActiveSheet.Shapes.AddTextbox( _
        msoTextOrientationHorizontal, _
        369#, 99.75, _
        176.25, 111# _
        ).Select
       
    'ボックス内の文字列
    Selection.Characters.Text = "abc" & Chr(10) & "def"
   
    '文字装飾
    With Selection.Characters.Font
        .Name = "MS Pゴシック "
        .FontStyle = "標準"
        .Size = 11
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = xlAutomatic
    End With
   
End Sub

テキストボックスの作成には
AddTextboxメソッドを使います。

AddTextboxメソッドの引数は順番に次のようになっています。

ラベル内のテキストの向き
左端からの位置
上端からの位置

高さ

テキストボックスを作成するとき
後で設定を変更する予定があるのか、ないのかで方法が違うと思います。

変更する予定がある場合は名前をつけたほうが
後々便利だと思います。

変更する予定がない場合は名前をつけるのが手間ですので、
作成したテキストボックスを
SelectしてSelectionをWithステートメントで使うか(上のコード)、
オブジェクト変数に入れてその変数を使います。

次のコードはNameプロパティを使う方法と
オブジェクト変数を使う方法です。

テキストボックスを作成コード2:

Sub macro110710b()
'テキストボックス作成
'Nameを使用

    Dim tbName As String
    tbName = "テキスト" '名前
   
    'テキストボックス作成
    ActiveSheet.Shapes.AddTextbox( _
        msoTextOrientationHorizontal, _
        369#, 99.75, _
        176.25, 111# _
        ).Name = tbName
       
    'ボックス内の文字列
    ActiveSheet.Shapes(tbName).DrawingObject. _
        Characters.Text = "abc" & Chr(10) & "def"
   
    '文字装飾
    With ActiveSheet.Shapes (tbName).DrawingObject. _
        Characters.Font
        .Name = "MS Pゴシック"
        .FontStyle = "標準"
        .Size = 11
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = xlAutomatic
    End With
   
End Sub

Sub macro110710c()
'テキストボックス作成
'オブジェクト変数を使用

    Dim tb As Object
   
    'テキストボックス作成
    Set tb = ActiveSheet.Shapes.AddTextbox( _
        msoTextOrientationHorizontal, _
        369#, 99.75, _
        176.25, 111#).DrawingObject
            
    ' ボックス内の文字列
    tb.Characters.Text = "abc" & Chr(10) & "def"
   
    '文字装飾
    With tb.Characters.Font
        .Name = "MS Pゴシック "
        .FontStyle = "標準"
        .Size = 11
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = xlAutomatic
    End With
   
End Sub

文字の装飾のコードの部分は
読んでそのままです。

AddTextboxメソッドの引数で左端からの位置と高さの値、
#が最後についています。
マクロ自動記録したものですので確信はありませんが、
これは型宣言文字だと思います。

型宣言文字は、
数値の最後につけるとデータ型を宣言できるというものです。

しかしAddTextboxメソッドのこの引数はSingle型で、
#はDouble型の型宣言文字です。
Single型の型宣言文字は、! なんですが、
この型の不一致についてはいまいちわかりません。

この#を消して上のコード3つを実行してもエラーにはならないので、
自分で数値を指定する場合も
まあ気にしなくても問題ないと思います。

樹を写生するときは大枝から描くように…
小枝はあとまわしです。

|

« 秒の小数部分の表示形式 | トップページ | テキストボックスを作成する2 »

コメント

Word2013 VBA でテキストボックスの作成するのに
非常に役に立ちました。

.DrawingObject
は不要でした。

ボックス内の文字列は
tb.TextFrame.TextRange.Text= "abc" & Chr(10) & "def"
文字装飾は
tb.TextFrame.TextRange.Text.Font
以下で設定可能です。

ありがとうございました。

投稿: ポン | 2015年10月27日 (火) 00時02分

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: テキストボックスを作成する:

« 秒の小数部分の表示形式 | トップページ | テキストボックスを作成する2 »