Hallo Rainer,
es it wohl in der Tat ein VBA vs. VB-Problem hier. Die von dir erwaehnte Funktion mit dem Index gibt’s in VBA nicht. Die Funktion zum Hinzufuegen eines Buttons hat folgende Signatur:
Set Control = object.Add( ProgID [, Name [, Visible]])
Einen Index gibt’s nur bei Tabs
In meiner Verzweiflung habe ich nun versucht, den Code zum Abfangen des jeweiligen Klick-Events dynamisch hinzuzufuegen.
Den Button fuege ich so hinzu:
Set AddButton = CurrentFrame.Controls.Add(„Forms.CommandButton.1“, „AddButton_“ & code, True)
Und das dazugehoerigen event:
Private Sub AddClickEventCode(langCode As String)
Dim VBCodeMod As Object
Dim lines As Long
Set VBCodeMod = ThisWorkbook.VBProject.VBComponents(„ComplexPOForm“).CodeModule
lines = VBCodeMod.CountOfLines + 1
VBCodeMod.InsertLines lines, „Private Sub AddButton_“ & langCode & „_Click()“
VBCodeMod.InsertLines lines + 1, „AddButtonClicked (“"" & langCode & „“")"
VBCodeMod.InsertLines lines + 2, „End Sub“
End Sub
Leider stuertzt mir Excel nun staendig ab, wenn der dynamisch zu erzeugende Code eingefuegt wird.
Ich sitze hier ganz schoen fest. Hast noch jemand einen Tipp?
Bis denne,
Martin
Machen wir es doch mal ganz konkret. Normalerweise, wenn ich
einen Button auf eine Userform packe, dann habe ich eine
Prozedur aehnlich dieser:
Private Sub CommandButton1_Click()
MsgBox(„Klickeriki“)
End Sub
OK.
Nun fuege ich meine Buttons wie folgt dynamisch hinzu:
Dim AddButton As MSForms.CommandButton
Set AddButton =
CurrentFrame.Controls.Add(„Forms.CommandButton.1“, „AddButton“
& code, True)
With AddButton
.Caption = „Add“
.Height = 18
.Width = 40
.Left = 495
.Top = 20
End With
Brrr. Das sieht in VB völlig anders aus, übersichtlicher. Da
liegt wohl auch Dein Problem …
Der Schnippsel „Code“ im Namen des Buttons ist eindeutig und
laesst mich den Button identifizieren - theoretisch.
Praktisch auch, „Code“ ist bei Dir der Index des
Steuerelementefeldes.
Wo aber
bekomme ich jetzt meine Prozedur „AddButton_code_click“ her?
Gar nicht, brauchst Du nicht. In VB hieße die …
„AddButton_click (Index As Integer)“
Du mußt in den Eigenschaften des Buttons, den du
‚vervielfältigen‘ willst, die Eigenschaft ‚Index‘ auf Null
setzen, dann hat auch die Prozedur für das Klickereignis den
richtigen Namen und Du hast in der Prozedur den Index, der Dir
übergeben wird … in VB jedenfalls. Ich hoffe, daß in VBA die
Syntax an der Stelle nicht zu weit abweicht.
Gruß, Rainer