Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1100to1104
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
Patrick
Hallo liebe VBA-Kenner,
ich stehe wiedermal vor einem kleinen Problem, bei dem mir bisher auch das große weite Internet nicht helfen konnte.
Ich erstelle während der Laufzeit in einer Userform Commandbuttons:
Private Sub UserForm_Initialize()
Dim mycmdbtn As MSForms.CommandButton
Set mycmdbtn = Me.Controls.Add("Forms.CommandButton.1", "cmd" & i, True)
With mycmdbtn
.Left = 336
.Height = 24
.Top = 84
.Width = 30
.Font.Size = 18
End With
End
Nun will ich auf das Click-Event des soeben erstellten Buttons zugriff erhalten, aber das geht natürlich nicht über "Sub mycmdbtn_Click()", da er den ja vorher noch nicht kennt. Im Internet habe ich dann Dinge wie "AddHandler mycmdbtn.Click, Adressof Prozedur_fuer_click" gefunden, allerdings beziehen die sich immer auf vb.net...ich hab aber nur VB 6.5. Was kann ich nun machen?
Zur Info: Ich brauche das Userform zur Eingabe von Baugruppen eines Moduls...da nicht jedes Modul gleich viele Baugruppen enthält muss das daher dynamisch sein. Der Button den ich erstelle steht für den "Eine Baugruppe hinzufügen"-Button...ich hoffe das war verständlich. Falls sich das obige nicht unter VB 6.5 lösen lässt....seht ihr andere Möglichkeiten einer solchen dynamischen Eingabe, die angenehm und übersichtlich für den Nutzer ist?
Vielen Dank für Eure Mühen im Voraus!!!!!!!
Patrick

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

Betreff
Benutzer
Anzeige
AW: dynamische Button Click-Event
07.09.2009 10:29:58
JogyB
Hi.
Ich sehe zwei Möglichkeiten:
1. Du schreibst die entsprechenden Ereignisprozeduren einfach schon mal in den Code der Tabelle. Ob der Button da ist oder nicht interessiert ja nicht weiter. Du mußt dann nur die Buttons sauber benennen, damit es keine Probleme gibt.
2. Du erzeugst den Code zur Laufzeit, siehe http://www.office-loesung.de/ftopic229690_0_0_asc.php
Gruss, Jogy
AW: dynamische Button Click-Event
07.09.2009 10:44:10
Patrick
Danke für die schnelle Antwort.
1.) habe ich probiert....das geht aber nicht, wahrscheinlich weil bei Codeerstellung noch kein solcher Button (cmd1) vorhanden ist und VB deswegen denkt es wäre ne normale Prozedur. Ergebnis ist, dass das Programm auf das Klicken des Buttons leider nicht reagiert.
2.) in dem Link finde ich nur Hilfestellungen zum löschen von Code, aber nichts zum hinzufügen
Patrick
Anzeige
AW: dynamische Button Click-Event
07.09.2009 10:57:20
JogyB
Hi.
1. Hast recht... habe das nur mit einem nachträglich hinzugefügten Button getestet und da ging es
2. Schau in dem Forum mal über dem "Thread erstellen"-Button, da gibt es ein "zurück" und ein "weiter". Damit kommst Du zu den anderen Themen.
3. Eine Möglichkeit wäre auch noch eine Klasse, der Du die CommandButtons nach Erstellung zuweist. Dort könntest Du dann über den Namen des Buttons den auszuführenden Code ermitteln.
So spontan würde ich 3. nehmen, Code während der Laufzeit einzufügen ist ein ziemliches Gefummel.
Gruss, Jogy
AW: dynamische Button Click-Event
07.09.2009 11:14:16
Patrick
Ich habs mit dem Code einfügen probiert und es kam "der programatische Zugriff auf Visual Basic ist nicht sicher" als Fehlermeldung.
Ich glaube ich werde mir Gedanken über eine andere Art der Realisierung machen müssen! Es sei denn jemand hat noch ne Idee?
Viele Grüße
Patrick
Anzeige
AW: dynamische Button Click-Event
07.09.2009 11:28:08
JogyB
Hi.
In der Tabelle Extras - Makros - Sicherheit - Vertrauenswürdige Herausgeber
Haken bei "Zugriff auf Visual Basis-Projekt vertrauen" setzen.
Und mach es über die Klasse, das ist wesentlich einfacher.
Gruss, Jogy
AW: dynamische Button Click-Event
07.09.2009 11:39:32
Patrick
Das mit dem Hinzufügen klappt...allerdings nicht in den Codeteil vom Userform sondern als extramodul.
Könntest du mir bzgl der Klassenerstellung auf die Sprünge helfen oder eine Seite an die Hand geben wo ich etwas ähnliches nachvollziehen kann? Leider habe ich nämlich keinen Schimmer wie das gehen soll :-(
VIELEN DANK!
Patrick
AW: dynamische Button Click-Event
07.09.2009 11:45:31
JogyB
Hi.
Mal ein Beispiel:
Erstelle ein Klassenmodul mit dem Namen cls_Test
Dort kommt dann folgender Code rein:
Option Explicit
Public WithEvents myCmd As MSForms.CommandButton
Private Sub myCmd_Click()
MsgBox (myCmd.Name & " gedrückt")
End Sub
In den Code des Formulars kommt dann folgendes:
Option Explicit
Dim myColl As New Collection
Private Sub UserForm_Initialize()
Dim myClass As cls_Test
Set myClass = New cls_Test
Set myClass.myCmd = Me.Controls.Add("Forms.CommandButton.1", "cmd_Test" & 2, True)
With myClass.myCmd
.Left = 336
.Height = 24
.Top = 84
.Width = 30
.Font.Size = 18
End With
myColl.Add myClass
End Sub
Das "Set myClass as New cls_Test" muss vor jede Zuweisung eines Objekts an die Klasse, da sonst die alte Zuweisung überschrieben wird.
Gruss, Jogy
Anzeige
AW: dynamische Button Click-Event
07.09.2009 12:12:53
Patrick
Wie geil ist das denn....es geht tatsächlich!
Könntest du mir jetzt noch erklären was ich da eigentlich gemacht habe? *schämfürdieFrage*
Vielen Vielen Dank!
Patrick
AW: dynamische Button Click-Event
07.09.2009 13:12:09
JogyB
Hi.
Eine Klasse erlaubt Dir, allgemeine Ergeignisprozeduren für von Dir gewählte Elemente zu verfassen.
Im konkreten Fall legst Du eine Klasse an, definierst in ihr einen CommandButton mit Ereignissen (dafür das WithEvents) und schreibst für diesen eine Prozedur für das Click-Ereignis.
Damit das ausgeführt wird, mußt Du den/die entsprechenden Command-Button(s) noch der Klasse zuordnen. Das passiert hier gleich bei der Erstellung des Buttons.
Damit das auch für mehrere geht, benutze ich noch eine eine Collection, in der alle Steuerelemente, die der Klasse zugeordnet, gesammelt werden. Ginge auch mit einem Array, ich mag die Collection aber lieber, da ich mir dann keine Gedanken über die Dimensionierung machen muss. Die Collection ist global für das UF definiert, da sie ja immer zur Verfügung stehen muss.
Wichtig ist auch noch das Set ... = New cls_Test. Damit erzeugst Du eine neue Instanz der Klasse. Das ist deswegen notwendig, weil Du sonst bei mehreren Elementen (in Deinem Fall CommandButtons) immer dieselbe Instanz der Klasse überschreiben würdest, so dass letztendlich nur das zuletzt hinzugefügte Element in der Collection wäre. Du könntest das New auch gleich in die Variablendeklaration schreiben, aber das würde dann nur die erste Instanz automatisch erzeugen. Anders wäre es, wenn Du statt der Collection einen Array verwendest, in dem Du die Elemente sammelst, da sollte das New in der Deklaration stehen, dann kannst Du es Dir im weiteren sparen.
Gruss, Jogy
Anzeige

49 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige