Forums Neueste Beiträge
 

VBA -Zur Laufzeit erzeugte Control Aktionen zuweisen II

30/06/2008 - 17:03 von GeWu | Report spam
Hallo VBA User,
in Anlehnung an die Frage von Ro.St. vom 1.9.2004 und die hilfreichen
Antworten von stefan onken dazu habe ich folgenden Code geschrieben:

Option Explicit
Public MyUF 'As VBComponent
Public MyCB As Control

Sub start()
Set MyUF = ThisWorkbook.VBProject.VBComponents.Add(3)
With MyUF
.Properties("Caption") = " Sim " & Date
.Properties("Top") = 120
.Properties("Left") = 40
.Properties("Width") = 200
.Properties("Height") = 100
End With

add_controls
event_hander

VBA.UserForms.Add(MyUF.Name).Show
ThisWorkbook.VBProject.VBComponents.Remove VBComponent:=MyUF

End Sub

Sub add_controls()
Dim n As Integer
For n = 1 To 2
Set MyCB = MyUF.Designer.Controls.Add("Forms.CommandButton.1")
With MyCB
.Left = 20
.Width = 100
.Top = 10 + (n - 1) * 30
.Height = 20
.Name = "CB" & n
.Caption = .Name
End With
Next n
End Sub

Sub event_handler()

With MyUF.codemodule
.InsertLines .CountOfLines + 1, "Sub CB1_Click()"
.InsertLines .CountOfLines + 1, "Unload Me"
.InsertLines .CountOfLines + 1, "End Sub"

.InsertLines .CountOfLines + 1, "Sub CB2_Click()"
.InsertLines .CountOfLines + 1, "handle_CB2"
' .InsertLines .CountOfLines + 1, "CB1.caption = ""Exit" 'ist ok
.InsertLines .CountOfLines + 1, "End Sub"

End With

End Sub

Sub handle_CB2()

Range("a20").Value = "CB2 clicked" 'ist ok

MyUF.CB1.Caption = "Exit"

End Sub

Zur Laufzeit wird erst eine Userform erzeugt, dann zwei CommandButtons mit
den Namen CB1 und CB2 hinzugefügt.
Im Sub "event_handler" werden für das CodeModule die Aktionen zugewiesen,
wobei die Aktion für CB2 nicht im CodeModule sondern im Sub "handle_CB2"
beschrieben werden soll. Dabei soll nicht auf dem Excel Sheet etwas
niedergeschrieben werden (Testweise habe ich da getan und es funktioniert),
sondern es soll auf ein anderes Objekt in der Userform (hier als Beispiel
CB1) zugegriffen werden.
Dies funktioniert nicht. Was ist bitte falsch? Ein Objekt ggf. nicht richtig
deklariert oder angegeben?
Vielen Dank für jegliche Hilfe im voraus
Gerhard Wunsch
 

Lesen sie die antworten

#1 Wolfgang Habernoll
30/06/2008 - 17:48 | Warnen spam
Hallo GeWu


snip

.Properties("Left") = 40
.Properties("Width") = 200
.Properties("Height") = 100
End With

add_controls
event_hander

VBA.UserForms.Add(MyUF.Name).Show
ThisWorkbook.VBProject.VBComponents.Remove VBComponent:=MyUF

End Sub


Sub event_handler()

With MyUF.codemodule
.InsertLines .CountOfLines + 1, "Sub CB1_Click()"

snip End




funktioniert bei mir einwandfrei, habe nur den Aufruf
event_hander
in event_handler umbenannt ;-)

mfG
Wolfgang Habernoll

[ Win XP Home SP-2 , XL2002 ]

Ähnliche fragen