Anzeige
Archiv - Navigation
1716to1720
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Aktion für viele Buttons zusammenfassen

Aktion für viele Buttons zusammenfassen
20.10.2019 11:59:56
Jubeldibub
Hallo Leute!
Ich habe eine UserForm auf der ca. 70 Buttons herumliegen, die bei einem Klick weitestgehend dasselbe tun (der Unterschied liegt da nur in einer Variablenbefüllung). Ich würde daher ungerne 70x "Private Sub Button1, 2, 3..." im Code haben, sondern das gerne bündeln.
In der Art:
Private Sub ButtonX
Variable1 = X
End Sub

Geht das?

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Aktion für viele Buttons zusammenfassen
20.10.2019 12:11:21
Regina
Hi,
ich würde den eigentlichen Code in eine Sub oder Function auslagern (je nachdem, ob Du eine Rückgabe brauchst. Dann hinter den Buttons die Sub bzw. Function aufrufen und die Variable als Parameterwert übergeben, also entweder für die Sub:
Call Subname(Variable1)
oder für die Function:
Rückgabewert = Functionname (Variable1)
Bei der Sub oder der Function musst Du dann im Kopf in () den Übergabewert deklarieren:
Subname bzw. Functionname (Variable1 as String) Wenn die Variable ein Text sein soll.
Gruß
Regina
Anzeige
AW: Aktion für viele Buttons zusammenfassen
20.10.2019 12:34:52
GerdL
Hallo,
aus welcher Leiste hast du die Buttons genommen?
Gruß Gerd
AW: Aktion für viele Buttons zusammenfassen
20.10.2019 12:46:43
Nepumuk
Hallo,
im Modul des Userforms:
Option Explicit

Private mobjCommandButtonClassCollection As Collection

Private Sub UserForm_Initialize()
    Dim objCommandButtonClass As clsCommandButton
    Dim objControl As MSForms.Control
    Set CommandButtonClassCollection = New Collection
    For Each objControl In Controls
        If TypeOf objControl Is MSForms.CommandButton Then
            Set objCommandButtonClass = New clsCommandButton
            Set objCommandButtonClass.CommandButton = objControl
            Call CommandButtonClassCollection.Add(Item:=objCommandButtonClass)
            Set objCommandButtonClass = Nothing
        End If
    Next
End Sub

Private Sub UserForm_Terminate()
    Set CommandButtonClassCollection = Nothing
End Sub

Private Property Get CommandButtonClassCollection() As Collection
    Set CommandButtonClassCollection = mobjCommandButtonClassCollection
End Property

Private Property Set CommandButtonClassCollection(ByRef probjCommandButtonClassCollection As Collection)
    Set mobjCommandButtonClassCollection = probjCommandButtonClassCollection
End Property

In einem Klassenmodul mit dem Namen "clsCommandButton":
Option Explicit

Private WithEvents mobjCommandButton As MSForms.CommandButton

Private Sub Class_Terminate()
    Set CommandButton = Nothing
End Sub

Private Sub mobjCommandButton_Click()
    MsgBox CommandButton.Name 'Hier kommt dein Code
End Sub

Friend Property Get CommandButton() As MSForms.CommandButton
    Set CommandButton = mobjCommandButton
End Property

Friend Property Set CommandButton(ByRef probjCommandButton As MSForms.CommandButton)
    Set mobjCommandButton = probjCommandButton
End Property

Gruß
Nepumuk
Anzeige
kreative alternative zur Klassenprog.
21.10.2019 17:45:34
Daniel
Hi
wenn dir das mit den Klassen zu kompliziert ist, dann gibt's noch folgende alternative:
erstelle die Anordnung der Buttons als Bild (z.B. über einen Screenshot der jetzigen Userform)
die Buttons müssen aber alle gleich groß und im selben Abstand angeordnet sein.
füge dieses Bild über das Imagecontrol in deine Userform ein.
erstelle für das Imagecontrol das MOUSE_DOWN-Event
über die X- und Y-Koordinaten der Klickposition kannst du dann berechnen, welcher Button angeklickt wurde und damit die entsprechende Aktion auslösen.
unter bestimmten Bedingungen kann die Programmierung auch relativ kurz ausfallen, wenn bspw für alle Buttons, die sich in der gleichen Zeile oder Spalte befinden, die gleiche Variablenzuweisung erfolgen soll.
Gruß Daniel
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige