Deine Antwort ist recht spärlich Gast62192. Dem Quellcode nach ist sie womöglich sogar ein wenig irreführend.
Beim Lesen würde ein Anfänger - und vielleicht sogar ein Fortgeschrittener - denken du hast die Fragestellung nicht richtig erfasst und antwortest an ihr vorbei (wegen dem UserForms.Add, du verstehst?).
Für den TE also nun ein wenig ausführlicher:
Option Explicit
Sub Bsp()
'Bedenke:
' Bei so etwas besteht immer eine Laufzeitfehler-Gefahr,
' also verzichte nicht auf eine Fehlerbehandlung (ich mach's hier nur der Kürze wegen).
'UserForm01 ansprechen ...
With GetUserFormByName("UserForm01")
'... und ein bestimmtes Control dieser
With .Controls("ComboBox01")
Call .AddItem("Item001")
Call .AddItem("Item002")
Call .AddItem("Item003")
.ListIndex = 0 'erstes Element auswählen
End With
Call .Show
End With
End Sub
'////////////////////////////////////////////////////
'// liefert 'Nothing' wenn die Form weder gefunden noch geladen werden konnte
Public Function GetUserFormByName(Name As String) As Object
Dim obj As Object
'1.) nachsehen ob die Form bereits geladen wurde
For Each obj In VBA.UserForms
If 0 = StrComp(obj.Name, Name, vbTextCompare) Then
Set GetUserFormByName = obj
Exit Function
End If
Next
'2.) die Form muss geladen werden
On Error Resume Next
Set GetUserFormByName = VBA.UserForms.Add(Name) 'kann ggf. 'Nothing' bleiben!
End Function
Dieses Beispiel berücksichtigt nicht mehrere geladene Instanzen ein und derselben UserForm.
Falls Du (EarlGrey) so etwas nutzt, musst Du den Quellcode natürlich diesbezüglich anpassen / erweitern.
Gruß
|