Hallo und guten Abend auch von mir,
weil eine UserForm ja auch nur eine Klasse ist, solltest du dieser eine Methode spendieren, mit der der Aufrufer alles, was in der Schnittstellendefinition benötigt wird, übergibt. Das Anzeigen, Schließen, Rückgeben und sonstige übernimmt dann die UserForm.
- Code: Alles auswählen
Option Explicit
'ClassName: SimpleQuestionaire
Private mRetVal As Variant
Public Function getAnswer(Question As String) As Variant
Me.Label1.Caption = Question
Me.Show
getAnswer = mRetVal
End Function
Private Sub CommandButton1_Click()
'OK
mRetVal = Me.TextBox1.Text
Me.Hide
End Sub
Private Sub CommandButton2_Click()
'Cancel
mRetVal = -1
Me.Hide
End Sub
Und beim Aufrufer:
- Code: Alles auswählen
Option Explicit
Sub Test()
Dim FrageAntwort As New SimpleQuestionaire
Dim Antwort as Variant
Antwort = FrageAntwort.getAnswer("How many Roads must a man walk down?")
If Antwort = -1 Then
Debug.Print "Abbruch"
Else
Debug.Print Antwort
End If
'Der Aufrufer ist Herr über das konkrete Objekt einer Klasse und terminiert es, wenn es notwendig ist:
Set FrageAntwort = Nothing
End Sub
Woher und wohin ist dabei egal, der Aufrufer hat die Kontrolle.
Viele Grüße
derHöpp