답변:
객체가 아닌 리턴 유형의 경우 다음과 같이 함수 이름에 값을 지정해야합니다.
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
Range
예를 들어) 객체를 반환 할 때 Set
일반 메소드에서 객체 변수를 설정할 때와 마찬가지로 사용해야 합니다. 예를 들어, "test"가 Range를 반환하는 함수 인 경우 return 문은 다음과 같습니다 set test = Range("A1")
.
set
문제가 발생할 수 있습니다. 나는없이 그것을하는 데 문제가 있었지만, 사용하면 set
:).
set test = Range("A1")
정확히 같습니다 test = Range("A1").Value
.
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
Variant
당신의 목표는 무언가처럼 배열을 반환하는 ReDim test(1 to 100)
오류를 트리거합니다. 또한, 그것은 비록 입니다 수와 같은 기본 타입 치료하기 Integers
가 다소 unidiomatic 간주됩니다 그렇게합니다. 코드를 읽기 어렵게 만듭니다. VBA 프로그래머는 함수 이름에 지정된 행을 스캔하여 함수의 기능을 이해합니다. 함수 이름을 일반 변수로 사용하면 불필요하게 모호합니다.
Exit Function
합니다.return
ReDim test(1 to 100)
'test'가 배열로 선언되지 않았기 때문에 오류를 유발 하지 않고는 불가능합니다! 그리고 다른 이유는 전혀 없습니다! 함수를 배열로 선언 할 수 없습니다. 로 선언 Variant
한 다음이 함수 내에 출력 배열 (동적 또는 정적 일 수 있음)을 빌드 test
한 다음이 배열을 test
반환 값으로 지정 ( "=")하면됩니다 . 더처럼 조작하기 ReDim
를 보내고, 당신은 예를 들어 변수에 반환 값을 할당해야합니다 Dim x as Variant
및 호출 x = test
, 그 후에 x
당신이 만든 것입니다 test
수!