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.
Но что делать, если функций 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)
То есть как минимум у тебя должны быть описаны модули те, разновидности которых ты хочешь включить в массив ф-й
Никакой глупости. Они действительно как-то описаны.
Теперь я не могу запустить, например первые 100 таких функций. Или все их также легко, как если бы это был массив. Или те из них, для которых в некотором массиве хранится флаг "запускать".
Как это получить удобства массива, не создавая 300 модулей?
public sub Parse1
...
exit sub
public sub Parse2
...
exit sub
...
public sub Parse300
...
exit sub
Теперь я не могу запустить, например первые 100 таких функций. Или все их также легко, как если бы это был массив. Или те из них, для которых в некотором массиве хранится флаг "запускать".
Как это получить удобства массива, не создавая 300 модулей?
Используй Evaluate("ячейка, в которую предварительно записана формула, использующая определенную тобой функцию" если нужно вернуть значения из функций, или Application.Run("имя макроса") в противном случае.
Спасибо.
Если нельзя никак "замассивить", то так и придется...
Вот так VB...
Если нельзя никак "замассивить", то так и придется...
Вот так VB...
Оставить комментарий
Ammanda
Можно создать массив функций?К примеру MyFuncs, чтобы потом писать:
Call MyFuncs(3param1, param2)
Или
Call MyFuncs(2param1,param2,param3,param4)