Dynamische Objekte während der Laufzeit abfragen
Hallo mal wieder,
ich habe heut den ganzen tag daran gesessen um meine dynamisch erstellten Labels, Textboxen und Checkboxen auf ein Click abzufragen. Habe dann nach 4 stunden Probieren rausgefunden das es wohl kein addhandler im VBA von Excel 2007 gibt. Ich muss dazu sagen das ich mich heute erstmals mit Klassen beschäfftigt habe und rein garnicht durch sehe.
ich habe das Beispiel auf dieser Seite Probiert und soweit verstanden:
http://www.online-excel.de/excel/singsel_vba.php?f=57
Allerdings brauche ich keine Buttons abzufragen und wenn ich versuche es auf andere Objecte zu übertragen bekomme ich nur fehlermeldungen..
Beispiel Checkboxen:
'Userform---------------
[...]
Dim oCheckBox1 As clsCheckBox
Dim oCheckBox2 As clsCheckBox
Dim checkbox100
Dim CHkBx As MSForms.CheckBox
'---
Set oCheckBox1 = New clsCheckBox
Set oCheckBox2 = New clsCheckBox
Set oCheckBox1.DieChkBxs = CheckBox1 ' Hier kommt der Fehler: Objekt erforderlich
Set CHkBx = Frame3.controls.Add("Forms.CheckBox.1") 'Positionsbeschreibung
With CHkBx
.Name = "chkbx" & VisPos
.Width = 450
.Height = 15
.Left = 23
.Top = DynTOP
.Caption = TreeView1.SelectedItem
.Value = 1
End With
Set oCheckBox2.DieChkBxs = CHkBx
Set CHkBx = Nothing
[...]
'Modul: clsCheckBox------------------------
Option Explicit
Public WithEvents DieChkBxs As MSForms.CheckBox
Private Sub DieChkBxs_Click()
DieChkBxs.ControlTipText = "Geklickt"
MsgBox "test"
DieChkBxs.BackColor = vbGreen
DieChkBxs.Font.Bold = True
End Sub
Private Sub DerChkBxs_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
MsgBox "Double"
End Sub
Mag jemand mit mir das mal langsam durchkauen und alles schritt für Schritt erklären. Ich weiß nicht ob es wichtig ist aber noch ein wenig zum Programmablauf:
ich habe am linken rand ein treeview, in welchem verschiedene Funktionen stehen. nach dem auswählen einer solchen funktion werden, für jede Auswahl eine Checkbox, 1 Label und eine Textbox nebeneinander, aber pro auswahl untereinander (quasi zeilen weise) in einem Frame erstellt. es sollen bis zu 256 "Zeilen" möglich sein. nun muss ich diese auf ein Click event abfragen um die entsprechenden Berechnungsfunktionen zu starten mit den eingabeparametern der in laufzeit erstellten Objecte. Diese besitzen Standartwerte, welche aber vom benutzer geändert werden können. Das Auslesen der objecte sollte kein Problem darstellen, ich will nur wissen, auf welches geclickt wurde.
Ich hatte auch schon überlegt ein Timer einzubauen und alle 500 ms die erstellten Objecte auf änderung zu überprüfen, das würde das programm aber zusätzlich verlangsamen, es brauch so schon sehr lange für die berechnungen.
Schönen Abend noch
Mit freundlichen Grüßen
ich habe heut den ganzen tag daran gesessen um meine dynamisch erstellten Labels, Textboxen und Checkboxen auf ein Click abzufragen. Habe dann nach 4 stunden Probieren rausgefunden das es wohl kein addhandler im VBA von Excel 2007 gibt. Ich muss dazu sagen das ich mich heute erstmals mit Klassen beschäfftigt habe und rein garnicht durch sehe.
ich habe das Beispiel auf dieser Seite Probiert und soweit verstanden:
http://www.online-excel.de/excel/singsel_vba.php?f=57
Allerdings brauche ich keine Buttons abzufragen und wenn ich versuche es auf andere Objecte zu übertragen bekomme ich nur fehlermeldungen..
Beispiel Checkboxen:
'Userform---------------
[...]
Dim oCheckBox1 As clsCheckBox
Dim oCheckBox2 As clsCheckBox
Dim checkbox100
Dim CHkBx As MSForms.CheckBox
'---
Set oCheckBox1 = New clsCheckBox
Set oCheckBox2 = New clsCheckBox
Set oCheckBox1.DieChkBxs = CheckBox1 ' Hier kommt der Fehler: Objekt erforderlich
Set CHkBx = Frame3.controls.Add("Forms.CheckBox.1") 'Positionsbeschreibung
With CHkBx
.Name = "chkbx" & VisPos
.Width = 450
.Height = 15
.Left = 23
.Top = DynTOP
.Caption = TreeView1.SelectedItem
.Value = 1
End With
Set oCheckBox2.DieChkBxs = CHkBx
Set CHkBx = Nothing
[...]
'Modul: clsCheckBox------------------------
Option Explicit
Public WithEvents DieChkBxs As MSForms.CheckBox
Private Sub DieChkBxs_Click()
DieChkBxs.ControlTipText = "Geklickt"
MsgBox "test"
DieChkBxs.BackColor = vbGreen
DieChkBxs.Font.Bold = True
End Sub
Private Sub DerChkBxs_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
MsgBox "Double"
End Sub
Mag jemand mit mir das mal langsam durchkauen und alles schritt für Schritt erklären. Ich weiß nicht ob es wichtig ist aber noch ein wenig zum Programmablauf:
ich habe am linken rand ein treeview, in welchem verschiedene Funktionen stehen. nach dem auswählen einer solchen funktion werden, für jede Auswahl eine Checkbox, 1 Label und eine Textbox nebeneinander, aber pro auswahl untereinander (quasi zeilen weise) in einem Frame erstellt. es sollen bis zu 256 "Zeilen" möglich sein. nun muss ich diese auf ein Click event abfragen um die entsprechenden Berechnungsfunktionen zu starten mit den eingabeparametern der in laufzeit erstellten Objecte. Diese besitzen Standartwerte, welche aber vom benutzer geändert werden können. Das Auslesen der objecte sollte kein Problem darstellen, ich will nur wissen, auf welches geclickt wurde.
Ich hatte auch schon überlegt ein Timer einzubauen und alle 500 ms die erstellten Objecte auf änderung zu überprüfen, das würde das programm aber zusätzlich verlangsamen, es brauch so schon sehr lange für die berechnungen.
Schönen Abend noch
Mit freundlichen Grüßen
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 143992
Url: https://administrator.de/contentid/143992
Ausgedruckt am: 17.11.2024 um 01:11 Uhr
3 Kommentare
Neuester Kommentar