Как вернуть результат из функции VBA



Как мне вернуть результат из функции?



например:



Public Function test() As Integer
return 1
End Function


Это дает ошибку при компиляции.



Как заставить эту функцию возвращать целое число?

747   4  

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

    Ничего не найдено.