2016-11-24 15 views
0

Excelファイルにコマンドボタンがあり、特定の場所に新しいテキストボックスが追加されています。今私は問題がある。前のテキストボックスの下に自動的にテキストボックスを追加したいと思います。私のスクリーンショットのように。私は手動で "Testeintrag"を作成し、上に+を押すと "Titelname hier eingeben"が作成されます。私はExcel:マクロでテキストボックスを配置

ActiveSheet.Shapes.AddTextbox(msoTextOrientationUpward, 932, 270, 27, _ 
    150).Select 

を使って手動で箱を置きしかし、私は別のものを追加するとき、それはちょうど私の前の1以上が、私はそれはように私の前の1の下で、次のいずれかを作成し、ことをしたいと思います。これどうやってするの?私の全体のマクロザッツ

The Text box "Titelname hier eingeben" gets created when I hit the + on the top.

Private Sub CommandButton1_Click() 
ActiveSheet.Shapes.AddTextbox(msoTextOrientationUpward, 932, 270, 27, _ 
    150).Select 
Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = _ 
    "Titelname hier eingeben" 
End Sub 
+0

最後のテキストボックスの位置を見つける方法が必要です。これらが唯一の簡単な形状であれば十分です。次に、最後のボックスの位置に基づいて新しいボックスの位置を指定します。 – arcadeprecinct

+0

はい、これは唯一の形です。最後のボックスの位置を見つけるにはどうすればよいですか?申し訳ありませんが、私は実際にはVisual Basicにはありません –

+0

あなたはVeryHiddenを持っている範囲または別のワークシートのシートに直接最後のボックスの位置を保存することができます – rohrl77

答えて

2

EDIT2:新しい要件に応じて更新されたコード。

Option Explicit 

Sub addayetnothertextbox() 

    Dim mybox 

    Dim top, left, height, width, margin 
    margin = 20 

    With ThisWorkbook.ActiveSheet.Shapes 

     left = .Item(.Count).left 
     top = .Item(.Count).top + .Item(.Count - 1).height + margin 
     width = .Item(.Count).width 
     height = .Item(.Count).height 

     Set mybox = .addtextbox(msoTextOrientationUpward, left, top, width, height) 

    End With 

End Sub 
+1

それは私のために働いていない。それはまだ位置932,270にテキストボックスを追加し、私は別のものを追加すると、それはまだ重複しています... –

+0

はい、本当に、私は学ぶべきことがたくさんあります:)しかし、私は職業でVBAが必要ない前。 実際には、1箱ごとに 'Box2.Top = Box1.Top + Box1.Height + 20'を実行する必要がありますか?従ってBox3.Top = Box2.Top + Box2.Height + 20'、 'Box4.Top = Box3.Top + Box3.Height + 20'、... 'Box180.Top = Box179.Top + Box179.Hight + 20 'など?それはかなり精巧ではありません... –

+0

私は唯一の** 2形**を持っていますが、目標は私が好きなだけ多くの箱を追加することができ、すべての箱は自動的に前のものの下にあります。だから最大52箱(年間の毎週)のように –

0

この方法は私にとっては複雑だったので、私は簡単な方法を作りました。

Private Sub CommandButton1_Click() 
Dim Left As Double, Top As Double 
With ActiveSheet 
Left = ActiveCell.Left 
Top = ActiveCell.Top 
ActiveSheet.Shapes.AddTextbox(msoTextOrientationUpward, Left, Top, 27, _ 
    190).Select 
    Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = _ 
    "Titelname hier eingeben" 
End With 
End Sub 

私はセルを選択し、その「追加」ボタンを押す必要があります。次に、アクティブセルがある場所にサイズ190x25のテキストボックスを追加します。

+1

これはうまくいくかもしれませんが、特にユーザーフレンドリーではなく、Martin Dreherによって提案されたオプションははるかに優れています。 –