जवाबों:
गैर-वस्तु वापसी प्रकारों के लिए, आपको अपने फ़ंक्शन के नाम का मान निर्दिष्ट करना होगा, जैसे:
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उसी तरह उपयोग करने की आवश्यकता है, यदि आप एक नियमित तरीके से ऑब्जेक्ट चर सेट कर रहे हैं। इसलिए, यदि, उदाहरण के लिए, "परीक्षण" एक ऐसा फ़ंक्शन था, जो एक रेंज लौटाता है तो रिटर्न स्टेटमेंट इस तरह दिखेगा set test = Range("A1")।
setइसे करने से समस्याएं हो सकती हैं। मैं इसे बिना कर मुद्दों था, लेकिन अगर मैं का उपयोग करें setमैं नहीं :)।
set test = Range("A1")इसके बिल्कुल बराबर है test = Range("A1").Value, जहां "टेस्ट" को रेंज के बजाय एक वेरिएंट के रूप में परिभाषित किया गया है।
VBA फ़ंक्शन फ़ंक्शन नाम को एक प्रकार के चर के रूप में मानते हैं। इसलिए " return" कथन का उपयोग करने के बजाय , आप बस कहेंगे:
test = 1
नोटिस, हालांकि, यह फ़ंक्शन से बाहर नहीं निकलता है। इस बयान के बाद किसी भी कोड को भी निष्पादित किया जाएगा। इस प्रकार, आपके पास कई असाइनमेंट स्टेटमेंट हो सकते हैं जो विभिन्न मानों को असाइन करते हैं test, और जब भी आप फ़ंक्शन के अंत तक पहुंचते हैं, तो मूल्य वापस लौटाया जाएगा।
फ़ंक्शन नाम पर केवल रिटर्न मान सेट करना अभी भी जावा (या अन्य) स्टेटमेंट के समान नहीं हैreturn , क्योंकि जावा में, 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)केवल एक त्रुटि को ट्रिगर किए बिना नहीं कर सकते क्योंकि 'परीक्षण' को एक सरणी के रूप में घोषित नहीं किया गया है! और किसी भी अन्य कारण से नहीं! आप किसी फ़ंक्शन को एक सरणी के रूप में घोषित नहीं कर सकते। इसे एक के रूप में घोषित करें Variant, फिर इस फ़ंक्शन के अंदर बस अपना आउटपुट ऐरे (यह डायनामिक या स्टेटिक हो सकता है) बनाएं testऔर फिर इस ऐरे को testरिटर्न वैल्यू के रूप में असाइन करें । इसे और अधिक हेरफेर करने के लिए, ReDimइसे पसंद करने के लिए , आपको किसी वैरिएबल, उदाहरण के लिए लौटाए गए मान को असाइन करना होगा, Dim x as Variantऔर कॉल करना होगा x = test, जिसके बाद xआपने क्या testकिया है!