Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
640to644
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
640to644
640to644
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Wie onclick bei dynamisch erstelltem command-bttn?

Wie onclick bei dynamisch erstelltem command-bttn?
28.07.2005 08:40:41
LT
Hi Leute,
am besten stelle ich meine Frage anhand eines Beispieles:
Excel holt Datensätze aus Access und stellt die Datensätze in jeweils einer Zeile dar.
In jeder Zeile bilde ich zusätzlich einen Command-Button ab, der dafür dienen soll, daß wenn man in der betreffenden Zeile auf den Button klickt, man weitere Details zu diesem Datensatz angezeigt bekommt.
(also bei "ONCLICK" auf den Command-Button, soll eine entsprechende Aktion ausgeführt werden.)
Meine Command-Buttons erstelle ich mit:
ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1").Select
Da diese Buttons erst zur Laufzeit dynamisch erstellt werden, habe ich folgendes Problem:
wie weise ich diesen BUttons einen "ONCLICK-Event" zu ?
(ich weiß ja nicht wieviele Zeilen es sein werden...)
Am liebsten wäre es mir, wenn die Command-Buttons alle die gleiche Function aufrufen würden, jeweils aber mit unterschiedlichen Übergabeparametern.
Kann mir jemand sagen, wie ich dynamisch generierten Command-Buttons so erstelle, daß Sie Übergabeparameter haben und eine Function aufrufen !?
Danke und Gruß,
LT

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

Betreff
Datum
Anwender
Anzeige
AW: Wie onclick bei dynamisch erstelltem command-b
28.07.2005 11:46:41
Ramses
Hallo wer auch immer
Bei Commandbuttons musst du den Code via VBA in das aktuelle Sheet schreiben.
Wie halt sonst auch bei einem Commandbutton der Code dort im Klassenmodul der Tabelle steht.
Eine etwas einfachere Variante wäre die Verwendung von Formular-Schaltflächen
Option Explicit

Sub test()
'Aufruf wo der Button hin soll
AddButton Range("E4")
End Sub

Sub AddButton(TarRange As Range)
'Zelle auswählen wo d
ActiveSheet.Buttons.Add(0, 0, 0, 0).Select
With Selection
    .Top = TarRange.Top
    .Left = TarRange.Left
    .Height = TarRange.Height
    .Width = TarRange.Width
    .Text = ActiveSheet.Shapes.Count
    'Diese Procedure wird ausgelöst
    .OnAction = "TestProcedure"
End With
End Sub

Sub TestProcedure()
MsgBox "Ausgelöst von " & Application.Caller
End Sub

Gruss Rainer
Anzeige
Vielen Dank - genau das Richtige ! o. T.
28.07.2005 12:20:45
LT
AW: Wie onclick bei dynamisch erstelltem command-b
29.07.2005 10:05:29
LT
Hallo Rainer,
jetzt muss ich Dich doch nochmal quälen:
Das Erstellen der Buttons wie oben beschrieben funktioniert prima - vielen Dank.
Ich erstelle also z. B. 20 Buttons in Spalte L (in jeder Zeile eins).
Wie kann ich alle 20 Buttons (auf einmal) wieder löschen, wenn ich nicht weiß, wie diese 20 Buttons heißen ? (wegen mir durchlaufe ich auch eine schleife 20 mal, aber ich kenne nur die zellen wo die buttons sind, nicht aber ihren namen ! - wie kann ich die dann löschen ?)
Wäre Prima wenn Du mir das noch sagen könntest.
Danke,
LT
AW: Wie onclick bei dynamisch erstelltem command-b
29.07.2005 19:09:22
Ramses
Hallo
das geht schon, aber da ich den Aufbau deiner Tabelle und dein Vorgehen nicht kenne, hier eine Variante mit einer Protokolldatei.
Diese Tabelle mit dem Namen "Protokoll" muss in deiner Mappe sein.
Per VBA auf "Visible = xlVeryHidden" setzen, damit der normale Benutzer da nicht rankommt.
Option Explicit

'Protokolldatei ist eine Tabelle mit dem Namen "Protokoll"
'Per VBA auf den Status = xlVeryHidden gesetzt
Public Const protName As String = "Protokoll"
Public protWks As Worksheet


Sub AddTest()
'Aufruf wo der/die Button hin soll/en
AddButton Range("E5:E10")
End Sub

Sub DelTest()
'Löscht Buttons in diesem Bereich
DelButtonProcedure Range("E4:E6")
End Sub

Sub AddButton(TarRange As Range)
Dim myC As Range
Set protWks = Worksheets(protName)
For Each myC In TarRange
    ActiveSheet.Buttons.Add(0, 0, 0, 0).Select
    With Selection
        'Eintragung der Bezugszelle
        protWks.Cells(protWks.Cells(Rows.Count, 1).End(xlUp).Row + 1, 1) = myC.Address
        'Eintragung der ButtonBezeichnung
        protWks.Cells(protWks.Cells(Rows.Count, 1).End(xlUp).Row, 2) = .Name
        Debug.Print .Name
        .Top = myC.Top
        .Left = myC.Left
        .Height = myC.Height
        .Width = myC.Width
        .Text = ActiveSheet.Shapes.Count
        'Diese Procedure wird ausgelöst
        .OnAction = "TestProcedure"
    End With
Next
End Sub

Sub DelButtonProcedure(delRange As Range)
Set protWks = Worksheets(protName)
Dim tmpName As String
Dim myC As Range
Dim i As Integer
With protWks
    For Each myC In delRange
        For i = .Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
            If .Cells(i, 1) = myC.Address Then
                tmpName = .Cells(i, 2).Text
                ActiveSheet.Shapes(tmpName).Delete
                .Rows(i).Delete
                Exit For
            End If
        Next i
    Next
End With
End Sub

Du darfst allerdings dann allerdings keinen Button mehr von Hand von löschen :-)
Sondern nur noch mit Code.
Das hinzufügen der Buttons habe ich dir etwas angepasst, du kannst nun einen Bereich übergeben, wo Buttons hin sollen.
Gruss Rainer
Anzeige
VIELEN DANK - einfach super. o.T.
01.08.2005 10:23:53
LT
Klappt einwandfrei !

38 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige