Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1160to1164
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
dynamische Button-Click-Event für Tabelle
Pia
Hallo,
unter folgendem Link:
https://www.herber.de/forum/archiv/1100to1104/t1100971.htm
wird eine Lösung für dynamische Button-Click-Events bei Userforms angeboten. Ich würde gerne wissen, wie man dies bei einem Tabellenblatt macht. Dieses Tabellenblatt wird inkl. Button per VBA erzeugt.
Vielen Dank im Voraus.
Grüße
Pia

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: dynamische Button-Click-Event für Tabelle
13.06.2010 21:47:18
Nepumuk
Hallo Pia,
in Tabellen ist es ein bisschen komplizierter da bein Einfügen eines ActiveX-Controls Excel ganz kurz in den Entwurfsmodus geht. Daher ist es nicht möglich die Zuweisung an die Klasse in der selben Prozedur zu machen. Des weiteren gehen durch diese Aktion die bisherigen Zuweisungen verloren und müssen neu aufgebaut werden. Hier mal ein Beispiel:
' **********************************************************************
' Modul: DieseArbeitsmappe Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Call Terminate_CommandButtonClass
End Sub

' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Private Declare Function SafeArrayGetDim Lib "oleaut32.dll" ( _
    ByRef psa() As Any) As Long

Private objCommandButtonClass() As clsCommandButton

Public Sub Create_Sheet_and_Button()
    Dim objWorksheet As Worksheet
    Set objWorksheet = Worksheets.Add(After:=Sheets(Sheets.Count))
    objWorksheet.OLEObjects.Add ClassType:="Forms.CommandButton.1", _
        Left:=126, Top:=55, Width:=100, Height:=40
    Application.OnTime Time + TimeSerial(0, 0, 1), "Initialize_CommandButtonClass"
    Set objWorksheet = Nothing
End Sub

Private Sub Initialize_CommandButtonClass()
    Dim objWorksheet As Worksheet, objOLEObject As OLEObject
    Dim intCounter As Integer
    For Each objWorksheet In Worksheets
        For Each objOLEObject In objWorksheet.OLEObjects
            If TypeOf objOLEObject.Object Is MSForms.CommandButton Then
                Redim Preserve objCommandButtonClass(intCounter)
                Set objCommandButtonClass(intCounter) = New clsCommandButton
                Set objCommandButtonClass(intCounter).prpSet_CommandButton = objOLEObject.Object
                intCounter = intCounter + 1
            End If
        Next
    Next
    Set objWorksheet = Nothing
    Set objOLEObject = Nothing
End Sub

Public Sub Terminate_CommandButtonClass()
    Dim intCounter As Integer
    If Cbool(SafeArrayGetDim(objCommandButtonClass())) Then
        For intCounter = LBound(objCommandButtonClass) To UBound(objCommandButtonClass)
            Set objCommandButtonClass(intCounter) = Nothing
        Next
    End If
    Erase objCommandButtonClass
End Sub

' **********************************************************************
' Modul: clsCommandButton Typ: Klassenmodul
' **********************************************************************

Option Explicit

Private WithEvents mobjCommandButton As MSForms.CommandButton

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

Private Sub Class_Terminate()
    Set mobjCommandButton = Nothing
End Sub

Private Sub mobjCommandButton_Click()
    MsgBox "Hallo Pia"
End Sub

Gruß
Nepumuk
Anzeige
AW: dynamische Button-Click-Event für Tabelle
13.06.2010 22:49:09
Beverly
Hi Pia,
beim Öffnen der Arbeitsmappe werden 10 Schalter erstellt:
Code im Codemodul "DieseArbeitsmappe"
Private Sub Workbook_Open()
SchalterErstellen
End Sub

ein Klassenmodul mit Namen "clsSchalter" mit folgendem Code (das ist der Code, welcher bei Klick auf die Schalter ausgführt wird)
Option Explicit
Public WithEvents cmbSchalter As MSForms.CommandButton
Private Sub cmbschalter_click()
MsgBox cmbSchalter.Caption
End Sub

und diesem Code in einem allgemeinen Modul
Option Explicit
Public arrSchalter() As New clsSchalter
Dim ooElement As OLEObject
Dim inZaehler As Integer
Sub SchalterErstellen()
Dim cmbSchalter As MSForms.CommandButton
With Worksheets("Tabelle1")
Application.ScreenUpdating = False
If .OLEObjects.Count > 0 Then .OLEObjects.Delete
For inZaehler = 1 To 10
.OLEObjects.Add "Forms.CommandButton.1"
Set ooElement = .OLEObjects(.OLEObjects.Count)
With ooElement
.Object.Caption = inZaehler
.Left = Worksheets("Tabelle1").Cells(1, 5).Left
.Top = 25 + inZaehler * 25
.Width = 100
.Height = 25
End With
ooElement.Object.TakeFocusOnClick = False
Next inZaehler
End With
Application.ScreenUpdating = True
Application.OnTime Now + TimeValue("00:00:01"), "InitSchalter"
End Sub
Sub InitSchalter()
inZaehler = 1
Application.ScreenUpdating = False
For Each ooElement In Worksheets("Tabelle1").OLEObjects
If ooElement.progID = "Forms.CommandButton.1" Then
ReDim Preserve arrSchalter(1 To inZaehler)
Set arrSchalter(inZaehler).cmbSchalter = Worksheets("Tabelle1").OLEObjects( _
ooElement.Name).Object
inZaehler = inZaehler + 1
End If
Next ooElement
Application.ScreenUpdating = True
End Sub

Das Makro "InitSchalter" zum Initialisieren der Schalter (also zum Eintragen in die Klasse sodass der Code im Klassenmodul auch ausgeführt wird), wird mit einem Zeitverzug von 1 Sekunde aus dem Erstellungmakro gestartet, weil Excel den Inhalt aller Variablen "vergisst", die es beim Erstellen der Schalter gefüllt hat - Ursache ist der kurze Wechsel in den Entwurfsmodus durch das Einfügen der Steuerelemente in das Tabellenblatt.
Wichtig ist, dass du im VBA-Editor unter Extras -&gt Verweise den Verweis auf "Microsoft Forms 2.0 Object Library" setzt, andernfalls werden die Objektvariablen nicht erkannt.


Anzeige

71 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige