2016-11-24 2 views
0

Ich habe eine Befehlsschaltfläche in meiner Excel-Datei, die ein neues Textfeld an einer bestimmten Stelle hinzugefügt. Jetzt habe ich ein Problem. Ich möchte das Textfeld automatisch unter dem vorherigen hinzufügen. So wie auf meinem Screenshot. Ich habe "Testeintrag" manuell erstellt und "Titelname hier eingeben" wird erstellt, wenn ich oben auf + klicke. Ich legte die Box manuell mitExcel: Position Textfeld über Makro

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

Aber wenn ich hinzufügen, ein anderes, es ist nur über meine vorherige, aber ich möchte, dass sie die nächste unter meinem vorherigen schafft, und so weiter. Wie kann ich das machen?

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

Das ist mein ganzes Makro:

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

Sie müssen einen Weg finden, um die Position der letzten Textbox zu finden. Wenn dies die einzigen Formen sind, die einfach genug sein sollten. Geben Sie dann die Position der neuen Box basierend auf der Position der letzten Box an. – arcadeprecinct

+0

Ja, das sind die einzigen Formen. Wie finde ich die Position der letzten Box? Sorry, ich bin nicht wirklich in Visual Basic –

+0

Sie könnten die Position der letzten Box direkt auf dem Blatt in einem Bereich oder auf einem anderen Arbeitsblatt, das Sie dann VeryHidden haben – rohrl77

Antwort

2

Edit2: Aktualisiert Code nach neuen Anforderung.

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

Das funktioniert nicht für mich. Es fügt immer noch das Textfeld an der Position 932, 270 und wenn ich ein anderes hinzufügen, ist es immer noch überlappend ... –

+0

Ja das ist wahr, ich habe viel zu lernen :) Aber ich brauche nicht VBA in meinem Beruf und nie benutzt Vor. Also eigentlich muss ich 'Box2.Top = Box1.Top + Box1.Height + 20' für jede einzelne Box tun? Also 'Box3.Top = Box2.Top + Box2.Höhe + 20',' Box4.Top = Box3.Top + Box3.Höhe + 20', ... 'Box180.Top = Box179.Top + Box179.Höhe + 20 'und so weiter? Ziemlich durchdacht ist es nicht ... –

+0

Nun, ich habe nur ** 2 Formen **, aber das Ziel ist, dass ich so viele Boxen hinzufügen kann, wie ich will und jede Box ist automatisch unter der vorherigen. Also bis zu 52 Boxen (für jede Woche des Jahres) –

0

Da diese Methode zu kompliziert für mich war, habe ich eine einfache Alternative erstellt.

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 

Also muss ich eine Zelle auswählen und dann auf den "Add" -Button klicken. Dann fügt es ein Textfeld mit der Größe 190x25 an der Stelle hinzu, an der sich die aktive Zelle befindet.

+1

Während das funktionieren mag, ist es nicht besonders benutzerfreundlich, und die von Martin Dreher vorgeschlagenen Optionen sind viel besser. –