Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Button erstellen via vba

Button erstellen via vba
09.02.2005 11:34:36
Jonny
Hi,
ich will einen Button per vba erstellen lassen.
Ich hab es schon mit dem Makroaufzeichner versucht. Jedoch ist dieser nicht dynamisch genung.
Ich will im Endeffekt, dass wenn man auf einen Button klickt, ein weiterer Button eine Zeile tiefer und eine Spalte weiter rechts erzeugt wird.
Ist das möglich?!
------------
Der Code vom Makroaufzeichner:

Sub Button erstellen()
ActiveSheet.Buttons.Add(1249.5, 151.5, 86.25, 19.5).Select
Selection.OnAction = "Best_Zeilen_Löschen"
ActiveSheet.Shapes("Button 167").Select
Selection.Characters.Text = "Zeile löschen"
With Selection.Characters(start:=1, Length:=13).Font
.Name = "Arial"
.FontStyle = "Standard"
.Size = 10
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With
End Sub

Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Button erstellen via vba
09.02.2005 11:55:16
Jonny
Danke schön :o)
hab doch noch ein Prob.
09.02.2005 12:27:46
Jonny
Hi,
bei meiner Tabelle kann es sein, dass mit einem button auch 2 buttons erzeugt werden sollen, die dann untereinander stehen sollen.
Doch ist es bei diesem Code nicht möglich, bzw. der zuerst erzeugte button steht noch an seiner ursprungszeile drin. So dass sich die zwei erzeugten Button überschneiden. Ist es möglich dies zuverhindern.
Ich hab schon versucht den Befehl (Offset) umzuändern, doch ist es mir nicht gelungen, das gewollte ergebnis zu erreichen.
Ich habe die genauen Zellangaben, wo der Button stehen soll. Weiss, aber nicht diese umzusetzen...
Danke im Vorraus.
-----------------------------

Sub CreateButtons()
Dim btn As Button
With ActiveSheet.Buttons(Application.Caller).TopLeftCell.Offset(1, 1)
Set btn = ActiveSheet.Buttons.Add(.Left, .Top, .Width, .Height)
btn.Caption = "Meldung 1"
btn.OnAction = "Meldung1"
End With
End Sub

Anzeige
AW: hab doch noch ein Prob.
09.02.2005 12:32:49
Hans
Hallo Jonny,
das mit dem überschneiden verstehe ich nicht, denn es dürfte beim Ursprungscode nicht vorkommen.
Entscheidende für die Positionierung ist folgende Zeile:
With ActiveSheet.Buttons(Application.Caller).TopLeftCell.Offset(1, 1)
Mit der vorstehenden Referenzierung wird die neue Schaltfläche eine Zeile unterhalb und eine Spalte rechts von der Ursprungsschaltfläche eingefügt.
Offset(0,1) bedeutet gleiche Zeile, eine Spalte rechts davon
Offset(-2,-1) bedeutet zwei Zeilen drüber, eine Spalte links davon
Gruss hans
Anzeige
AW: hab doch noch ein Prob.
09.02.2005 12:34:12
Hans
... noch nur Überschneidung: Zur Überschneidung kann es nur kommen, wenn die erste Schaltfläche über mehrere Spalten geht. Das kannst Du dann aber über die Offset-Vorgabe ausgleichen.
Gruss hans
AW: hab doch noch ein Prob.
09.02.2005 12:44:15
Jonny
Hi hans,
also mit dem Offset habe ich schon verstanden.
Nun wenn ich auf den Button, der einen Button erzeugen soll, klicke, dann wird zuerst der Button1 eine Zeile tiefer und eine Zeile nach rechts verschoben erschaffen. Klicke ich erneut auf diesen button, dann erzeugt er noch einen Button2 eine Zeile tiefer und eine Zeile nach rechts.
Der erste erzeugte Button rutscht nicht richtig runter. Er hat nun die Größe von zwei Zellen.
Schema:
button
(klick button)
button
button1
(klick button)
button
button1/button2
button1
Anzeige
AW: hab doch noch ein Prob.
09.02.2005 13:33:24
Hans
Hallo Jonny,
mir ist nicht ganz klar, ob die zusätzlichen Schaltflächen jeweils durch Klick auf die erste, bereits von Anfang an vorhandene Schaltfläche erstellt werden sollen. Wenn ja, ist die Sache relativ aufwendig, denn es muss ja Zeilen-(oder Button-)weise abgefragt werden, welche Buttons schon vorhanden sind.
Sollen die Schaltflächen allerdings revolvierend erzeugt werden, ein Klick auf die soeben erstellte Schaltfläche erzeugt eine neue usw., so ist jeder Schaltfläche der Ursprungscode zuzuweisen.
Gruss hans
Anzeige
AW: hab doch noch ein Prob.
10.02.2005 07:26:55
Hans
Hallo Jonny,
wenn Du mit der Löschen-Schaltfläche den erstellten Button samt darunterliegender Zeile löschen möchtest, wie folgt:

Sub Löschen()
With ActiveSheet.Buttons(Application.Caller)
Rows(.TopLeftCell.Row).Delete
.Delete
End With
End Sub

gruss hans
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Infobox / Tutorial

Dynamisches Erstellen von Buttons in Excel via VBA


Schritt-für-Schritt-Anleitung

Um eine Schaltfläche in Excel dynamisch per VBA zu erstellen, kannst du den folgenden Code verwenden. Dieser Code erzeugt einen Button, der bei jedem Klick einen neuen Button in der nächsten Zeile und Spalte erstellt.

  1. Öffne den VBA-Editor in Excel (Alt + F11).
  2. Füge ein neues Modul hinzu (Rechtsklick auf "VBAProject" > Einfügen > Modul).
  3. Kopiere den nachstehenden Code in das Modul:
Sub ButtonErstellen()
    Dim btn As Button
    With ActiveSheet.Buttons(Application.Caller).TopLeftCell.Offset(1, 1)
        Set btn = ActiveSheet.Buttons.Add(.Left, .Top, .Width, .Height)
        btn.Caption = "Neuer Button"
        btn.OnAction = "ButtonAktion"
    End With
End Sub

Sub ButtonAktion()
    MsgBox "Dieser Button wurde gedrückt!"
End Sub
  1. Schließe den VBA-Editor und speichere die Datei als Makro-fähige Arbeitsmappe (.xlsm).
  2. Füge einen Button über das Menü "Entwicklertools" > "Einfügen" > "Button (Formularsteuerelement)" hinzu und weise ihm das Makro ButtonErstellen zu.

Jetzt kannst du den Button klicken und es werden neue Buttons generiert!


Häufige Fehler und Lösungen

  • Fehler: Button wird nicht korrekt platziert.

    • Lösung: Stelle sicher, dass du die Offset-Parameter im Code richtig einstellst. Offset(1, 1) bedeutet eine Zeile tiefer und eine Spalte nach rechts.
  • Fehler: Buttons überschneiden sich.

    • Lösung: Überprüfe, ob du die TopLeftCell korrekt referenzierst. Wenn ein Button über mehrere Zellen geht, kann das zu Überschneidungen führen.

Alternative Methoden

Wenn du eine Schaltfläche in Excel ohne VBA hinzufügen möchtest, kannst du auch die "Entwicklertools"-Registerkarte nutzen:

  1. Gehe zu "Entwicklertools" > "Einfügen".
  2. Wähle die Schaltfläche (Formularsteuerelement) aus und ziehe sie in dein Arbeitsblatt.
  3. Weise dem Button ein Makro zu, das du zuvor erstellt hast.

Du kannst auch HTML-Buttons erstellen, wenn du Excel über eine Webanwendung verwendest. Dies erfordert jedoch zusätzliche Kenntnisse in Webentwicklung.


Praktische Beispiele

Hier ist ein Beispiel für ein Makro, das zwei Buttons untereinander erstellt:

Sub ZweiButtonsErstellen()
    Dim btn1 As Button, btn2 As Button
    With ActiveSheet.Buttons(Application.Caller).TopLeftCell
        Set btn1 = ActiveSheet.Buttons.Add(.Left, .Top + .Height, .Width, .Height)
        btn1.Caption = "Button 1"
        btn1.OnAction = "Aktion1"

        Set btn2 = ActiveSheet.Buttons.Add(.Left, .Top + 2 * .Height, .Width, .Height)
        btn2.Caption = "Button 2"
        btn2.OnAction = "Aktion2"
    End With
End Sub

Sub Aktion1()
    MsgBox "Button 1 geklickt!"
End Sub

Sub Aktion2()
    MsgBox "Button 2 geklickt!"
End Sub

Tipps für Profis

  • Nutze With-Anweisungen, um den Code zu optimieren und die Lesbarkeit zu verbessern.
  • Experimentiere mit der Shapes-Sammlung von Excel, um komplexere Layouts für deine Buttons zu erstellen.
  • Wenn du Buttons in großen Mengen erstellen musst, überlege, eine Schleife in deinem Code zu verwenden.

FAQ: Häufige Fragen

1. Wie kann ich einen Button in Excel VBA einfügen?
Du kannst einen Button in Excel VBA mit dem Befehl ActiveSheet.Buttons.Add erstellen. Diese Methode ermöglicht dir, die Position und Größe des Buttons zu definieren.

2. Was soll ich tun, wenn der Button nicht funktioniert?
Stelle sicher, dass das zugewiesene Makro korrekt definiert ist und dass der Button tatsächlich auf das richtige Makro verweist.

3. Kann ich Buttons auch in Excel Online erstellen?
In Excel Online stehen VBA und die Möglichkeit, Buttons zu programmieren, nicht zur Verfügung. Du musst die Desktop-Version von Excel verwenden, um VBA-Buttons zu erstellen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige