В VBA нет наследования (или VB 6), поэтому, к сожалению, суперкласса не существует.
Вы, однако, имеете преимущество очень свободной печати. Вы можете объявить переменную как Variant
, которая является универсальным типом данных, который может содержать любой тип значения, включая элемент управления. Как правило, вы должны попытаться и избегать , используя тип Variant
, если это возможно, но в этом случае у вас мало выбора.
Чтобы вы могли объявить свою функцию следующим образом:
Public Function MyIndexOf(list As Variant, str As String) As Integer
' Do work here...
End Function
Конечно, помня, что тип данных Variant
может действительно содержать значение любого типа , и что этот тип неизвестен до времени выполнения, хороший программист защиты должен проверить, чтобы убедиться, что указанный тип не является Integer
или String
или даже элементом управления, который не предоставляет тех же открытых элементов, что и элемент управления ComboBox
или ListBox
(таким образом нарушая код, который вы написали, ожидая того, который это сделает).
Вы можете определить фактический тип Variant
во время выполнения, используя функцию TypeName
. Таким образом, вы можете просто изменить указанную выше функцию, включив в нее выражение guard, чтобы защитить от чего-либо, кроме передаваемого в ComboBox
или ListBox
элемента управления:
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