함수에서 결과를 어떻게 반환합니까?
예를 들면 다음과 같습니다.
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답변
