Bir fonksiyondan nasıl sonuç döndürebilirim?
Örneğin:
Public Function test() As Integer
return 1
End Function
Bu bir derleme hatası verir.
Bu fonksiyonun bir tamsayı döndürmesini nasıl sağlayabilirim?
Nesne olmayan geri dönüş türleri için, değeri işlevinizin adına atamanız gerekir, bunun gibi:
Public Function test() As Integer
test = 1
End Function
Örnek kullanım:
Dim i As Integer
i = test()
Fonksiyon bir Object türü döndürüyorsa, Set
anahtar sözcüğünü aşağıdaki gibi kullanmanız gerekir:
Public Function testRange() As Range
Set testRange = Range("A1")
End Function
Örnek kullanım:
Dim r As Range
Set r = testRange()
İşlev adına bir dönüş değeri atamanın işlevinizin yürütülmesini sonlandırmadığını unutmayın. Fonksiyondan çıkmak istiyorsanız, açıkça Exit Function
(Fonksiyondan Çık) demeniz gerekir. Örneğin:
Function test(ByVal justReturnOne As Boolean) As Integer
If justReturnOne Then
test = 1
Exit Function
End If
'more code...
test = 2
End Function
Dokümantasyon: http://msdn.microsoft.com/en-us/library/office/gg264233%28v=office.14%29.aspx
VBA işlevleri, işlev adının kendisini bir tür değişken olarak ele alır. Yani bir "return
" deyimi kullanmak yerine, sadece şunu söylersiniz:
test = 1
Yine de bunun fonksiyonun dışına çıkmadığına dikkat edin. Bu ifadeden sonraki herhangi bir kod da yürütülecektir. Böylece, test
e farklı değerler atayan birçok atama deyiminiz olabilir ve fonksiyonun sonuna ulaştığınızda değer ne olursa olsun, döndürülen değer o olacaktır.
Sadece geri dönüş değerini fonksiyon adına ayarlamak Java (veya diğer) return
deyimiyle tam olarak aynı değildir, çünkü java'da return
fonksiyondan çıkar, bunun gibi:
public int test(int x) {
if (x == 1) {
return 1; // exits immediately
}
// still here? return 0 as default.
return 0;
}
VB'de tam eşdeğeri iki satır alır eğer işlevinizin sonunda dönüş değerini ayarlamıyorsanız. Yani, VB'de tam sonuç şu şekilde görünecektir:
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
Durum böyle olduğundan, geri dönüş değişkenini yöntemdeki diğer değişkenler gibi kullanabileceğinizi bilmek de güzeldir. Bunun gibi:
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
Ya da geri dönüş değişkeninin nasıl çalıştığına dair en uç örnek (ancak gerçekte nasıl kodlamanız gerektiğine dair iyi bir örnek olması gerekmez) - sizi geceleri uykusuz bırakacak olan:
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