2016-11-24 2 views
0

Я получил кнопку Command в своем файле Excel, которая добавляет новое текстовое поле в определенном месте. Теперь у меня проблема. Я хотел бы добавить текстовое поле автоматически по предыдущему. Так что на моем снимке экрана. Я создал «Testeintrag» вручную, и «Titelname hier eingeben» создается, когда я нажимаю «+» вверху. Я поставил коробку вручную сExcel: Поместить текстовое поле через макрос

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

Но когда я добавить еще один, это как раз над моей предыдущей, но я хотел бы, что он создает следующий под моим предыдущим, и так далее. Как я могу это сделать?

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 в моей профессии и никогда не использовал ее до. Так что на самом деле мне нужно сделать «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.Height + 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

Хотя это может сработать, его не очень удобно, и варианты, предложенные Мартином Дрихером, намного лучше. –

Смежные вопросы