Как вернуть результат из функции?
Например:
Public Function test() As Integer
return 1
End Function
Это дает ошибку компиляции.
Как заставить эту функцию возвращать целое число?
Как вернуть результат из функции?
Например:
Public Function test() As Integer
return 1
End Function
Это дает ошибку компиляции.
Как заставить эту функцию возвращать целое число?
Для типов возврата без объекта вам необходимо присвоить значение имени вашей функции, например:
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 обрабатывают имя функции как своего рода переменную. Поэтому вместо использования инструкции "return
" вы просто скажете:
test = 1
Обратите внимание, что это не выходит из функции. Любой код после этого оператора также будет выполнен. Таким образом, вы можете иметь множество операторов присваивания, которые присваивают разные значения test
, и независимо от того, какое значение имеет значение, когда вы достигнете конца функции, будет возвращено значение.
Простое значение возвращаемого значения для имени функции все еще не совсем то же, что и оператор 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 эквивалент точный принимает две строки, если вы не устанавливаете возвращаемое значение в конце вашей функции. Итак, в 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