Per VBA Pozeduren zu Commandbutton: AddHandler

Wiedermal so ein Problem:
Ich erstelle in einem Userform Commandbuttons per VBA.

For j = 1 To jj
S = „CB“ & j
Set myCommand = UF.F.Controls.Add(„Forms.commandbutton.1“, S)
With myCommand
.Caption = „Write!“
.Left = 490
.Top = T
.Height = 60
.Width = 40
End With
T = T + 70
next jj

Jetzt möchte ich den Knöpfen natürlich auch Prozeduren zu ordnen. Das funktioniert wohl irgendwie mit Addhandler. Bei mir leider noch nicht :frowning: Geht das überhaupt mit VBA? Ich finde immer nur Blogs für VB.

Ich muss natürlich auch dann in der Prozedur wissen, welcher Button die Prozedur letzendlich aufgerufen hat. Das soll wohl mit „Sender“ gehen…
Ich habe schon verschiedenste BSP ausprobiert, aber er meint immer ungültige Prozedur.

AddHandler UF.F.myCommand.Click, AddressOf MultiEvent

Muss ich vielleicht noch einen Verweis setzen?
Melanie

Ich erstelle in einem Userform Commandbuttons per VBA.
Jetzt möchte ich den Knöpfen natürlich auch Prozeduren zu
ordnen. Das funktioniert wohl irgendwie mit Addhandler. Bei
mir leider noch nicht :frowning: Geht das überhaupt mit VBA? Ich

Hi Melanie,

keine Ahnung was du mit AddHandler (von welcher Excelversionsprichst du, oder ist es ein anderes Officepaket?) und Sender meinst.

Es ist sicherer die UF komplett per Code zu erstellen als in eine bestehende UF etwas hineinzubasteln, da dies mysteriöse Events auslösen kann.

probiers mal so:
(Getestet mit Excel2000)

Option Explicit
'
Sub UserForm()
Dim frmCommandButton, VBComp, strName
Dim intRow, jj, j, S, T, myCommand
jj = 2
Set VBComp = ThisWorkbook.VBProject.VBComponents.Add(vbext\_ct\_MSForm)
With VBComp
 .Properties("Caption") = "Meine Userform"
 .Properties("Width") = 400
 .Properties("Height") = 500
 strName = .Properties("Name")
End With
For j = 1 To jj
 S = "CB" & j
 Set myCommand = VBComp.Designer.Controls.Add("Forms.commandbutton.1", S)
 With myCommand
 .Caption = "Write!" & j
 .Left = 0
 .Top = T
 .Height = 60
 .Width = 40
 End With
 T = T + 70
 With VBComp.CodeModule
 intRow = .CreateEventProc("Click", S)
 .InsertLines intRow + 1, "MsgBox ""Hallo, ich bin CB"""
 End With
Next j
VBA.UserForms.Add(strName).Show
End Sub

Gruß
Reinhard

Per VBA Pozeduren zu Commandbutton: Danke!
Danke, funktioniert Prima!

Zur Laufzeit Userform mit Commandbuttons erstellen
Hallo Interessierte,

ich habe den nachstehenden Code noch ein wenig ergänzt mit Kommentar-Hinweisen auf (ggfs. je nach Excelversion nötigen) gesetzte Verweisen.

Warum
Dim VBComp As VBComponent
einen Fehler ergibt ist mir schleierhaft, aber halb so wild, laß ich’s halt wech :smile:

Im Code selbst ist neben Anpassungen in den Dimzeilen nur die Zeile
.InsertLines intRow + 1, „MsgBox „„Hallo, ich bin CB“ & j & „“““
abgeändert worden.

Gruß
Reinhard

Option Explicit
'
Sub UserForm()
' Verweis auf Microsoft Visual basic 5.0 Extensibility muß gesetzt sein bei XL2000
' Ebenfalls Verweis auf Microsoft Forms 2.0 Object Library
' Normal setzt Vba selbst den Verweis auf Forms2.0 bei Einfügen einer UF aber man weiß ja nie
' Typename(VBComm) ergibt VbComponent, aber dies bei Dim anzugeben klappt nicht!?
Dim frmCommandButton As CommandButton, strName As String, VBComp ' As VBComponent
Dim intRow As Integer, jj As Integer, j As Integer, S As String, T As Integer, myCommand As Control
jj = 2
Set VBComp = ThisWorkbook.VBProject.VBComponents.Add(vbext\_ct\_MSForm)
With VBComp
 .Properties("Caption") = "Meine Userform"
 .Properties("Width") = 400
 .Properties("Height") = 500
 strName = .Properties("Name")
End With
For j = 1 To jj
 S = "CB" & j
 Set myCommand = VBComp.Designer.Controls.Add("Forms.commandbutton.1", S)
 With myCommand
 .Caption = "Write!" & j
 .Left = 0
 .Top = T
 .Height = 60
 .Width = 40
 End With
 T = T + 70
 With VBComp.CodeModule
 intRow = .CreateEventProc("Click", S)
 .InsertLines intRow + 1, "MsgBox ""Hallo, ich bin CB" & j & """"
 End With
Next j
VBA.UserForms.Add(strName).Show
End Sub