VBA. Можно создать массив функций?

Ammanda

Можно создать массив функций?
К примеру MyFuncs, чтобы потом писать:
Call MyFuncs(3param1, param2)
Или
Call MyFuncs(2param1,param2,param3,param4)

smit1

Можно

Makc500

ээ?

Ammanda

Как?

igorek1

а почему бы не ввести лишний параметр?
Чем несколько функций лучше, чем одна?

smit1

Тупейший способ

' 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!")

Ammanda

Как вариант - хорошо.
Но что делать, если функций 500. Создавать 500 классовых модулей?
А одна функция - это хуже, потому что в ней будет 500 x N строчек, вместо 500 функций по N строчек. N = 10-15.

Alena_08_11

Я возможно щас напишу глупость, но ведь функции которые ты хочешь поместить в массив - уже должны быть как то описаны ?
Я к тому, что наверняка при тех же условиях можно написать

' 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)

То есть как минимум у тебя должны быть описаны модули те, разновидности которых ты хочешь включить в массив ф-й

Ammanda

Никакой глупости. Они действительно как-то описаны.
  
public sub Parse1
...
exit sub

public sub Parse2
...
exit sub

...

public sub Parse300
...
exit sub

Теперь я не могу запустить, например первые 100 таких функций. Или все их также легко, как если бы это был массив. Или те из них, для которых в некотором массиве хранится флаг "запускать".
Как это получить удобства массива, не создавая 300 модулей?

Trofimovyoa

Используй Evaluate("ячейка, в которую предварительно записана формула, использующая определенную тобой функцию" если нужно вернуть значения из функций, или Application.Run("имя макроса") в противном случае.

Ammanda

Спасибо.
Если нельзя никак "замассивить", то так и придется...
Вот так VB...
Оставить комментарий
Имя или ник:
Комментарий: