AlexLexus
Дата: 25.04.2002 13:17:49
Здравствуйте господа!
Помогите в решении следующего вопроса.
Не работает конструкция:
Function f(x As Long, y As long)
f=x*y
End Function
Sub primer()
Dim a As Long
Dim b As Long
Dim s As String
a=1
b=2
s="f(a,b)"
Eval(s)
End Sub
На строке Eval(s) выдает ошибку.
Может ли кто нибудь объяснить, что тут не так?
AlexLexus
Дата: 30.04.2002 12:11:09
Ну, допустим, long. Но это не столь важно, т.к. в начальном вопросе я привел упрощенный пример.
На самом деле все довольно запутанней.
У меня есть набор функций, допустим f1(), f2(), ....., f85()
У каждой из этих функций свой набор параметров. Max кол-во параметров=7.
Тип данных значений, возвращаемый функциями разный. Допустим f(1) As Long, f(2) As Double,
f(3) As String и т.д.
Далее в том или ином месте кода мне нужно вызвать одну из этих функций, но я заранее не знаю какую, т.к. это зависит от определенных условий.
Чтобы не рисовать Select Case из 85 Сase`ов я поступил так:
создал таблицу из 2-х полей:
1-е поле - № функции,
2-е поле - строка с самой функцией.
Например:
1 f1(x,y)
2 f2(x,y,z)
3 f3(x)
4 f4(x,y,z,a,b)
и т.д.
Затем перед вызовом функции извлекаю из этой таблицы строку, содержащую функцию, в какую нибудь переменную (например ss), и с помощью Eval(ss) делаю вызов этой функции.
Но эта зараза не хочет работать.
Вот так!
Ольга
Дата: 30.04.2002 13:12:41
Запись для строки в вашем примере должна выглядеть так
s = "f(" & Format(a) & "," & Format(b) & ")"
Проверьте, у меня работает