programing

VBA 함수에서 결과를 반환하는 방법

newnotes 2023. 4. 10. 22:13
반응형

VBA 함수에서 결과를 반환하는 방법

함수의 결과를 반환하려면 어떻게 해야 합니까?

예를 들어 다음과 같습니다.

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

문서:기능문

VBA 함수는 함수 이름 자체를 일종의 변수로 취급합니다.따라서 "를 사용하는 대신return" 라고만 말할 수 있습니다.

test = 1

단, 이 기능은 중단되지 않습니다.이 문 뒤에 있는 모든 코드도 실행됩니다.따라서 다양한 값을 할당하는 할당문을 여러 개 가질 수 있습니다.test함수의 끝에 도달하면 반환되는 값이 됩니다.

반환값을 함수명으로 설정하는 것만으로는 Java(또는 기타)와 완전히 동일하지 않습니다.returnstatement, 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

언급URL : https://stackoverflow.com/questions/2781689/how-to-return-a-result-from-a-vba-function

반응형