J'ai créé un UserForm VBA qui est essentiellement une zone de saisie glorifiéTraiter Userform comme une fonction
Tout comme une boîte d'entrée peut être utilisé comme celui-ci
Dim returnVal As String
returnVal = InputBox("Write some string")
Je voudrais que mon userform à courir comme ce
Dim returnVal As customClass
Set returnVal = MyUserForm([some arguments])
ie. le code MyUserForm()
transmet certains arguments au userform, et lorsque le userform est fermé, il récupère des arguments (sous la forme d'une classe personnalisée plutôt que d'une chaîne normale)
Quelle est la meilleure façon de structurer mon userform autoriser cette fonctionnalité?
Actuellement, je suis juste de déclarer certaines variables et la classe personnalisée publiquement. J'attrape les clics du bouton de commande et les événements Query_close()
pour masquer le formulaire, puis je lis le outputVal et ferme complètement le formulaire. Je n'aime pas ça parce que j'aimerais que mon formulaire soit totalement autonome, et je pense que la capture d'événements est désordonnée.
Dans le code simplifié (lecture/retourner une chaîne):
Function myUf(inVal As String) As String
Dim frm As New frmTest
frm.inputval = inVal
frm.Init 'sets caption. We cannot rely on userform initialize as this runs before inputval is set
'We could pass a variable here to save writing to the public variable
frm.Show
myUf = frm.outputVal
Set frm = Nothing
End Function
Et dans mon Userform appelé frmTest
avec une zone de texte appelé tb1
Public inputval As String
Public outputVal As String
Public Sub Init()
Me.Caption = inputval 'setting caption, but could pass this anywhere
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode <> 1 Then Cancel = 1
outputVal = tb1 'reading value from textbox, but could return anything here
Me.Hide
End Sub
Il s'agit du code pour un formulaire MSAccess, pas de code pour un Userform VBA. – jkpieterse