The Dream
обрамляй код тэгами.
по коду, ты путаешь возвращаемое значение функции и установка макросов @error функцией. я тебе выше уже писал, что одно не равно другому в понятийном плане. когда вызываешь функцию, создаются три объекта
1. то, что в return при определении функции, или 0, если return не было
2. @error. если использовал seterror, то это значение, если нет, то 0
3. @extended. если использовал setextended или второй параметр seterror, то это значение. если нет, то 0
то есть, каждый раз когда ты вызываешь функцию, эти значения заполняются. и проверять равенство одного из них другому неверный подход, а следовательно
If Func_A() = @error Then
бессмысленно. я тебя уже три раза спросил что ты хочешь получить, а ты все время ссылаешься на свой код. макрос @error предназначен для идентификации разного рода ошибок, чтобы во время сбоя функции ты знал – какая именно ошибка произошла. поэтому проверяют значение самого макроса, а не значение функции. как правило для формирования ошибок, значение функции выставляют равным одному и тому же нетипичному значению. если хочешь пример, то вот простейшая реализация
Func SomeFunc($a = 1, $b = 2, $c = 3)
If $a < 1 Then Return SetError(1, 0, -1)
If $b < 2 Then Return SetError(2, 0, -1)
If $c < 3 Then Return SetError(3, 0, -1)
Return ($a + $b + $c)/3
EndFunc
в этом примере есть некоторая функция, которая ВОЗВРАЩАЕТ значение, т.к. при любом исходе сработает один из Return'ов. НО, у функции есть три исключительных варианта.
1. первый параметр не может быть меньше 1, если вдруг окажется что меньше, то функция вернет условно "нетипичное" значение -1 и установит макрос @error в значение 1, то есть если ты хочешь узнать не произошел ли этот ошибочный вариант, то должен проверить @error = 1.
2. аналогично со вторым параметром, только @error установится в значение 2
3. @error установится в значение 3.
то есть, после вызова функция сначала проверит три своих параметра на "неверность" значений. если все ок, то вернет тебе их среднее. если же не все ок, то вернет -1 и поменяет @error. для того, чтобы узнать что конкретно произошло, ты должен проверить этот @error, для этого он и нужен.
Func SomeFunc($a = 1, $b = 2, $c = 3)
If $a < 1 Then Return SetError(1, 0, -1)
If $b < 2 Then Return SetError(2, 0, -1)
If $c < 3 Then Return SetError(3, 0, -1)
Return ($a + $b + $c)/3
EndFunc
$d = SomeFunc(2, 3, 4)
If @error = 1 Then
MsgBox(0, '', 'Ой, кажется первый параметр меньше 1. Ошибка')
ElseIf @error = 2 Then
MsgBox(0, '', 'Ой, кажется второй параметр меньше 2. Ошибка')
ElseIf @error = 3
MsgBox(0, '', 'Ой, кажется третий параметр меньше 3. Ошибка')
Else
MsgBox(0, '', 'Все нормально, среднее значение введенных параметров ' & $d)
EndIf
поэкспериментируй с разными входными данными для SomeFunc и увидишь который из msgbox'ов сработает