Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA: Button dynamisch erstellen+Funktion zuweisen

VBA: Button dynamisch erstellen+Funktion zuweisen
11.12.2007 12:09:49
Dirk
Hallo liebes Forum,
seit Tagen versuche ich verzweifelt folgende Aufgabe zu lösen:
Ein Button soll dynamisch in der aktuellen Zeile und einer fest vorgegeben Spalte erstellt werden, weiterhin soll dieser Button dann eine Funktion zugewiesen bekommen.
Der Hintergrund dazu ist, dass ein Tabellenblatt dynamisch aus "Teilvorlagen" aufgebaut wird (hinterlegt in einem Mastersheet):
zuerst der Kopfbereich, der unterschiedlich sein kann, dann die Informationszeilen, zum Schluss der Fußbereich, der ebenfalls unterschiedlich sein kann. In diesem Fußbereich kann es vorkommen, dass zusätzlich noch ein Button mit einer immer gleichen Funktion (dem Aufruf einer Form, welche ein Listfenster enthält) "eingebaut" werden muss.
Bei meinen bisherigen Bemühungen habe ich es zumindest schon einmal geschafft, dass der Button in der aktuellen Zeile und der festen Spalte erzeugt wird:

Private Sub Create_Button()
Dim btn As Button
'Button dynamisch in aktuell gewählter Zeile erstellen
Tabelle1.OLEObjects.Add(ClassType:="Forms.CommandButton.1", _
Link:=False, _
DisplayAsIcon:=False, _
Left:=Tabelle1.Cells(ActiveCell.Row, 6).Left + 5, _
Top:=Tabelle1.Cells(ActiveCell.Row, 6).Top, Width:=10#, Height:=9).Select
'Button nun noch eine Funktion zuweisen
'hier: show_me
End Sub


Jetzt verzweifle ich daran, dem Button noch die Funktion "show_me" (hier nur die Messagebox - später den Aufruf der Form)


Private Sub show_me()
MsgBox "Klappt endlich!"
End Sub


zuzweisen.
Wie muss ich hier vorgehen? Vielen Dank schon einmal im Voraus für die Hilfe!
Mit freundlichen Grüßen,
Dirk vdH

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: Button dynamisch erstellen+Funktion zuwei
11.12.2007 12:26:00
Rudi
Hallo,
die Zeit hättest du besser mit Recherche hier im Forum verbracht ;-)
https://www.herber.de/mailing/129000h.htm
Gruß
Rudi
Eine Kuh macht Muh, viele Kühe machen Mühe

AW: VBA: Button dynamisch erstellen+Funktion zuwei
11.12.2007 12:38:13
ransi
HAllo
Wenn es dir nur darum geht einen einzelnen Button zu erstellen, geht das auch so:
' **********************************************************************
' Modul: Tabelle1 Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Private Sub Create_Button()
Dim btn As Button
Tabelle1.OLEObjects.Add(ClassType:="Forms.CommandButton.1", _
    Link:=False, _
    DisplayAsIcon:=False, _
    Left:=Tabelle1.Cells(ActiveCell.Row, 6).Left + 5, _
    Top:=Tabelle1.Cells(ActiveCell.Row, 6).Top, Width:=10#, Height:=9).Name = "Button_1"
End Sub

Private Sub Button_1_Click()
MsgBox "Klappt endlich"
End Sub

Wenn es mehrere werden sollen, kann man das mit einem KlassenModul ganz sauber lösen.
Was die Programmierung von Klassenmodulen angeht bin ichaber nicht Sattelfest.
ransi

Anzeige
AW: VBA: Button dynamisch erstellen+Funktion zuwei
11.12.2007 16:22:01
Dirk
Danke Rudi und ransi für die Lösung! Mit ein paar Anpassungen funktioniert es nun so, wie es sollte...
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Dynamisches Erstellen und Zuweisen von Funktionen zu Excel-Buttons


Schritt-für-Schritt-Anleitung

Um einen Excel VBA Button dynamisch zu erstellen und eine Funktion zuzuweisen, folge diesen Schritten:

  1. Öffne den VBA-Editor:

    • Drücke Alt + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul hinzu:

    • Klicke mit der rechten Maustaste auf "VBAProject (DeinWorkbookName)" und wähle Einfügen > Modul.
  3. Füge den folgenden Code ein:

    Private Sub Create_Button()
       Dim btn As Button
       'Button dynamisch in aktuell gewählter Zeile erstellen
       Set btn = Tabelle1.OLEObjects.Add(ClassType:="Forms.CommandButton.1", _
           Link:=False, _
           DisplayAsIcon:=False, _
           Left:=Tabelle1.Cells(ActiveCell.Row, 6).Left + 5, _
           Top:=Tabelle1.Cells(ActiveCell.Row, 6).Top, Width:=10#, Height:=9)
       btn.Name = "Button_" & ActiveCell.Row ' Dynamischer Name
       ' Funktion zuweisen
       btn.Object.Caption = "Klick mich"
       btn.Object.OnAction = "show_me" ' Hier wird die Funktion zugewiesen
    End Sub
    
    Private Sub show_me()
       MsgBox "Klappt endlich!"
    End Sub
  4. Schließe den VBA-Editor und gehe zurück zu Excel.

  5. Führe das Makro aus:

    • Drücke Alt + F8, wähle Create_Button und klicke auf Ausführen.

Jetzt solltest du einen Excel Button in der aktuellen Zeile haben, der die Funktion show_me ausführt, wenn du darauf klickst.


Häufige Fehler und Lösungen

  • Fehler beim Erstellen des Buttons:

    • Stelle sicher, dass du den richtigen Blattnamen (z.B. Tabelle1) verwendest und dass das Blatt aktiv ist.
  • Button funktioniert nicht:

    • Überprüfe, ob die Funktion show_me im gleichen Modul definiert ist.
  • Button wird nicht angezeigt:

    • Prüfe, ob die Zelle, in der du den Button erstellen möchtest, sichtbar ist und nicht ausgeblendet wurde.

Alternative Methoden

  1. VBA Button einfügen: Du kannst auch direkt einen Button in Excel einfügen, ohne VBA zu verwenden. Gehe zu Entwicklertools > Einfügen > Schaltfläche (Formularsteuerelement).

  2. HTML Button Funktion zuweisen: Falls du mit HTML arbeitest, kannst du Buttons ebenfalls dynamisch erstellen und Funktionen zuweisen. Dies ist jedoch nicht direkt in Excel möglich.


Praktische Beispiele

  • Beispiel 1: Erstelle mehrere Buttons in einer Schleife:

    Private Sub Create_Multiple_Buttons()
      Dim i As Integer
      For i = 1 To 5
          Create_Button ' Erstelle 5 Buttons
      Next i
    End Sub
  • Beispiel 2: Button für unterschiedliche Funktionen erstellen:

    btn.Object.OnAction = "show_me_" & i ' Unterschiedliche Funktionen zuweisen

Tipps für Profis

  • Button-Stile anpassen: Du kannst die Eigenschaften des Buttons (Farbe, Größe, Schriftart) über die btn.Object-Eigenschaften anpassen.

  • Fehlerbehandlung einfügen: Nutze On Error Resume Next und On Error GoTo 0, um Fehler beim Erstellen der Buttons zu handhaben.

  • Klassenmodule verwenden: Für komplexe Projekte ist es sinnvoll, Klassenmodule zu nutzen, um die Handhabung von Buttons und deren Funktionen zu optimieren.


FAQ: Häufige Fragen

1. Wie kann ich die Position des Buttons ändern?
Du kannst die Left und Top Eigenschaften im Code anpassen, um den Button an einer anderen Stelle zu platzieren.

2. Können Buttons in einer Schleife erstellt werden?
Ja, du kannst eine Schleife verwenden, um mehrere Buttons mit unterschiedlichen Funktionen dynamisch zu erstellen.

3. Wie kann ich den Button umbenennen?
Verwende die btn.Name Eigenschaft, um dem Button einen dynamischen Namen zu geben, z.B. btn.Name = "Button_" & ActiveCell.Row.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige