VBA. Можно создать массив функций?
Можно
ээ?
Как?
Чем несколько функций лучше, чем одна?
' Square.cls
Public Function Eval(ByVal x As Long) As Long
Eval = x * x
End Function
' Concat.cls
Public Function Eval(ByVal s1 As String, ByVal s2 As String) As String
Eval = s1 + s2
End Function
' test.bas
Dim f(0 To 1) As Object
Set f(0) = New Square
Set f(1) = New Concat
MsgBox f(0).Eval(1)
MsgBox f(1).Eval("Hello, ", "World!")
Но что делать, если функций 500. Создавать 500 классовых модулей?
А одна функция - это хуже, потому что в ней будет 500 x N строчек, вместо 500 функций по N строчек. N = 10-15.
Я к тому, что наверняка при тех же условиях можно написать
' test.bas
Dim f(0 To 3) As Object
Set f(0) = New Square
Set f(1) = New Concat
Set f(2) = New Concat
Set f(3) = New Square
MsgBox f(0).Eval(1)
MsgBox f(1).Eval("Hello, ", "World!")
MsgBox f(2).Eval("Omg ", "ffs")
MsgBox f(3).Eval(2)
То есть как минимум у тебя должны быть описаны модули те, разновидности которых ты хочешь включить в массив ф-й
public sub Parse1
...
exit sub
public sub Parse2
...
exit sub
...
public sub Parse300
...
exit sub
Теперь я не могу запустить, например первые 100 таких функций. Или все их также легко, как если бы это был массив. Или те из них, для которых в некотором массиве хранится флаг "запускать".
Как это получить удобства массива, не создавая 300 модулей?
Используй Evaluate("ячейка, в которую предварительно записана формула, использующая определенную тобой функцию" если нужно вернуть значения из функций, или Application.Run("имя макроса") в противном случае.
Если нельзя никак "замассивить", то так и придется...
Вот так VB...
Оставить комментарий
Ammanda
Можно создать массив функций?К примеру MyFuncs, чтобы потом писать:
Call MyFuncs(3param1, param2)
Или
Call MyFuncs(2param1,param2,param3,param4)