Il n'y a pas d'héritage dans VBA (ou VB 6), donc, malheureusement, il n'y a pas une telle chose comme une superclasse.
Vous bénéficiez cependant d'un typage très lâche. Vous pouvez déclarer la variable sous la forme Variant
, qui est un type de données universel pouvant contenir n'importe quel type de valeur, y compris un contrôle. Généralement, vous devriez essayer et éviter en utilisant le type Variant
si possible, mais dans ce cas, vous avez peu de choix.
Vous pouvez déclarer votre fonction comme ceci:
Public Function MyIndexOf(list As Variant, str As String) As Integer
' Do work here...
End Function
Bien sûr, se rappelant qu'un type de données Variant
peut vraiment tenir tout type de valeur, et que le type est connu avant l'exécution -temps, un bon programmeur défensif vérifierait pour s'assurer que le type spécifié n'est pas un Integer
ou un String
ou même un contrôle qui n'expose pas les mêmes membres publics qu'un contrôle ComboBox
ou ListBox
(cassant ainsi le code que vous avez écrit en attendant celui qui fait).
Vous pouvez déterminer le type réel d'un Variant
lors de l'exécution à l'aide de la fonction TypeName
. Donc, vous pouvez simplement modifier la fonction ci-dessus pour inclure une clause de sauvegarde pour protéger contre tout autre qu'un contrôle ComboBox
ou ListBox
étant passé dans:
Public Function MyIndexOf(list As Variant, str As String) As Integer
If (Not TypeName(list) = "ComboBox") And (Not TypeName(list) = "ListBox") Then
MsgBox "Wrong type of list variable was specified."
Else
' Do work here...
End If
End Function
-vous pas dire 'TypeName (liste)'? – systemovich
@Geoffrey: Bien sûr que je le fais; bonne prise. Je suppose que vous pouvez dire ce que je nommerais cette variable. C'est réparé. –
Merci fonctionne parfaitement – PKeno