(Wordマクロ・Excelマクロ)テキストボックスを追加する
WordやExcelでテキストボックスを追加する方法のうち、AddTextboxメソッドについて解説します。Selection.CreateTextboxについては、テキストボックスを追加するを参考にしてください。
このページで解説する項目は次の通りです。上から順番に解説します。
②~⑥は引数の説明であり、いずれも指定必須の項目です。
- ①テキストボックスの追加
- ②テキストボックスの方向
- ③テキストボックスの左からの位置
- ④テキストボックスの上からの位置
- ⑤テキストボックスの幅
- ⑥テキストボックスの高さ
- ⑦数値の単位をすべて指定する場合の使用例
- ⑧補足
①テキストボックスの追加
解説
Shapes.AddTextboxメソッドには5つの引数があり、以下の例のように指定します(それぞれの引数については後述します)。
使用例
Wordの場合
Public Sub テキストボックスを追加する() 'ActiveDocument ActiveDocument.Shapes.AddTextbox Orientation:=msoTextOrientationHorizontal, _ Left:=100, Top:=100, Width:=100, Height:=100 End Sub
Excelの場合
Public Sub テキストボックスの追加() 'ActiveSheet ActiveSheet.Shapes.AddTextbox Orientation:=msoTextOrientationHorizontal, _ Left:=100, Top:=100, Width:=100, Height:=100 End Sub
引数名はもちろん省略可能(下のコードを参照)ですが、可読性を失わないためにできる限り引数名も記載した方がよいでしょう。
Public Sub テキストボックスの追加() '引数名は省略可能 ActiveDocument.Shapes.AddTextbox msoTextOrientationHorizontal, 100, 100, 100, 100 End Sub
②テキストボックスの方向
引数Orientationで設定します。省略はできません。
MsoTextOrientation列挙体で定義されている7つの定数を指定できますが、その内の1つはサポートされていないため、ここでは実質的に使える6つについて解説します。
列挙体 | 説明 | 実際の画像 |
---|---|---|
msoTextOrientationDownward | 右へ90度回転 | ![]() |
msoTextOrientationHorizontal | 横書き | ![]() |
msoTextOrientationHorizontalRotatedFarEast | 横書き(左90度回転) | ![]() |
msoTextOrientationUpward | 左へ90度回転 | ![]() |
msoTextOrientationVertical | 左寄せ縦書き(マクロでのみ設定できる) | ![]() |
msoTextOrientationVerticalFarEast | 縦書き | ![]() |
通常はmsoTextOrientationHorizontalまたはmsoTextOrientationVerticalFarEastのどちらかを指定すればよいでしょう。
③テキストボックスの左からの位置
引数Leftで設定し、小数での指定が可能です。省略はできません。
通常はポイント単位となりますが、数値の単位を指定することもできます。Wordの数値の単位について、詳しくは(Wordマクロ)数値の単位についてを参照してください。なお、Wordは「Application.MillimetersToPoints」とせずに「MillimetersToPoints」としても動作しますが、ExcelはApplicationを省略できません。また、ExcelはMillimetersToPointsメソッドを指定できないなど、細かな違いがあります。
使用例
Wordの場合
Public Sub テキストボックスの追加() '数値の単位をmmで指定 ActiveDocument.Shapes.AddTextbox Orientation:=msoTextOrientationHorizontal, _ Left:=MillimetersToPoints(100), Top:=100, Width:=100, Height:=100 End Sub
Excelの場合
Public Sub テキストボックスの追加() '数値の単位をcmで指定(mmでの指定はできません) ActiveSheet.Shapes.AddTextbox Orientation:=msoTextOrientationDownward, _ Left:=Application.CentimetersToPoints(10), Top:=100, Width:=100, Height:=100 End Sub
④テキストボックスの上からの位置
引数Topで設定し、小数での指定が可能です。省略はできません。
通常はポイント単位となりますが、数値の単位を指定することもできます。詳しくは、③テキストボックスの左からの位置を参照してください。
⑤テキストボックスの幅
引数Widthで設定し、小数での指定が可能です。省略はできません。
通常はポイント単位となりますが、数値の単位を指定することもできます。詳しくは、③テキストボックスの左からの位置を参照してください。
⑥テキストボックスの高さ
引数Heightで設定し、小数での指定が可能です。省略はできません。
通常はポイント単位となりますが、数値の単位を指定することもできます。詳しくは、③テキストボックスの左からの位置を参照してください。
⑦数値の単位をすべて指定する場合の使用例
次の使用例は、左からの位置を10cm(100mm)、上からの位置を10cm(100mm)、幅を5cm(50mm)、高さを2cm(20mm)と設定する場合の例です。
使用例
Wordの場合
Public Sub テキストボックスの追加() '数値の単位をmmで指定 ActiveDocument.Shapes.AddTextbox Orientation:=msoTextOrientationHorizontal, _ Left:=MillimetersToPoints(100), Top:=MillimetersToPoints(100), _ Width:=MillimetersToPoints(50), Height:=MillimetersToPoints(20) End Sub
<実行結果>
Excelの場合
Public Sub テキストボックスの追加() '数値の単位をcmで指定 ActiveDocument.Shapes.AddTextbox Orientation:=msoTextOrientationHorizontal, _ Left:=CentimetersToPoints(10), Top:=CentimetersToPoints(10), _ Width:=CentimetersToPoints(5), Height:=CentimetersToPoints(2) End Sub
<実行結果>
⑧補足
描画キャンパスにテキストボックスを追加する場合
CanvasItems.AddTextboxメソッドを利用します。Excelには描画キャンパスが用意されていないため、以下のコードはWord専用となります。
次の使用例は、新たに追加する描画キャンパスにテキストボックスを追加する場合の例です。
使用例
Public Sub 描画キャンパスにテキストボックスを追加する() Dim shp As Shape Set shp = ActiveDocument.Shapes.AddCanvas(Left:=MillimetersToPoints(100), Top:=MillimetersToPoints(100), _ Width:=MillimetersToPoints(100), Height:=MillimetersToPoints(100)) shp.CanvasItems.AddTextbox Orientation:=msoTextOrientationHorizontal, _ Left:=MillimetersToPoints(100), Top:=MillimetersToPoints(100), _ Width:=MillimetersToPoints(50), Height:=MillimetersToPoints(50) Set shp = Nothing End Sub
アンカーを指定する場合
Wordのみ、テキストボックスを追加する際に、どの段落に紐づくものかアンカーを指定することができるよう、anchorというパラメータが用意されています。
しかし、こちらで検証してみたところ、アンカーを指定してもしなくても紐づく段落は常に同じという結果になりました。
私の検証方法が間違っている可能性は否めませんが、WordのVBAでテキストボックスを追加する際にはアンカーの位置指定はできないと考えたほうがよいでしょう。
Selection.CreateTextboxについて
Wordのみの機能です。
長くなりましたので、別記事に分けて記載しました。テキストボックスを追加する(CreateTextbox)を参考にしてください。
最近のコメント