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
'programing' 카테고리의 다른 글
| git 'pull request'를 'push request'라고 부르지 않는 이유는 무엇입니까? (0) | 2023.04.10 |
|---|---|
| 셸: 다른 셸 스크립트에서 셸 스크립트를 호출하려면 어떻게 해야 합니까? (0) | 2023.04.10 |
| 클릭 가능한 라벨이 있는 체크박스를 작성하려면 어떻게 해야 합니까? (0) | 2023.04.10 |
| 사전을 보면서 반복할 수 있는 방법이 있나요? (0) | 2023.04.10 |
| macOS Montrey, Xcode의 코드 서명 오류 - 리소스 포크, 파인더 정보 또는 이와 유사한 이물질은 허용되지 않습니다. (0) | 2023.04.10 |