4 ответов:
для типов возвращаемых объектов, не являющихся объектами, необходимо присвоить значение имени функции, например:
Public Function test() As Integer test = 1 End Functionпример использования:
Dim i As Integer i = test()если функция возвращает тип объекта, то вы должны использовать
Setключевое слово вроде этого:Public Function testRange() As Range Set testRange = Range("A1") End Functionпример использования:
Dim r As Range Set r = testRange()обратите внимание, что присвоение возвращаемого значения имени функции не завершает выполнение функции. Если вы хотите выйти из функции, то нужно явно сказать
Exit Function. Например:Function test(ByVal justReturnOne As Boolean) As Integer If justReturnOne Then test = 1 Exit Function End If 'more code... test = 2 End Functionдокументация: http://msdn.microsoft.com/en-us/library/office/gg264233%28v=office.14%29.aspx
функции VBA обрабатывают само имя функции как своего рода переменную. Поэтому вместо использования "
просто установка возвращаемого значения в имя функции по-прежнему не ровно то же самое, что Java (или другой)
returnзаявление, потому что в java,returnвыход из функции, как это:public int test(int x) { if (x == 1) { return 1; // exits immediately } // still here? return 0 as default. return 0; }в VB, the точно эквивалент занимает две строки если вы не устанавливаете возвращаемое значение в конце вашей функции. Итак, в VB точное следствие будет выглядеть так:
Public Function test(ByVal x As Integer) As Integer If x = 1 Then test = 1 ' does not exit immediately. You must manually terminate... Exit Function ' to exit End If ' Still here? return 0 as default. test = 0 ' no need for an Exit Function because we're about to exit anyway. End Functionтак как это так, это также приятно знать, что вы можете использовать возвращаемую переменную, как и любую другую переменную в методе. Вот так:
Public Function test(ByVal x As Integer) As Integer test = x ' <-- set the return value If test <> 1 Then ' Test the currently set return value test = 0 ' Reset the return value to a *new* value End If End Functionили, по крайней пример как возвращаемая переменная работает (но не обязательно хороший пример того, как вы должны на самом деле код) - тот, который будет держать вас ночью:
Public Function test(ByVal x As Integer) As Integer test = x ' <-- set the return value If test > 0 Then ' RECURSIVE CALL...WITH THE RETURN VALUE AS AN ARGUMENT, ' AND THE RESULT RESETTING THE RETURN VALUE. test = test(test - 1) End If End Function
ниже код сохраняет возвращаемое значение в переменной
retValа тоMsgBoxможно использовать для отображения значения:Dim retVal As Integer retVal = test() Msgbox retVal
Comments