प्रदर्शन के संदर्भ में, यह कोई महत्वपूर्ण मुद्दा नहीं होगा।
मुख्य अंतर यह है कि उपयोगकर्ता परिभाषित फ़ंक्शन को आपके कोड में अभिव्यक्ति में उपयोग किया जा सकता है, जहां एक उप नहीं हो सकता है।
यह वास्तव में यहां एक अंतर का विशाल माउंट एवरेस्ट है।
यह अंतर वास्तव में प्रवेश करने के लिए ही सीमित नहीं है, लेकिन आदत हर कार्यक्रमों की भाषा पर लागू होता है और मुझे लगता है कि प्रणाली के बारे में सोच सकते हैं उपयोगकर्ता परिभाषित कार्यों के निर्माण का समर्थन करता है।
परिभाषित समारोह का उपयोग करने का मुख्य लाभ कई हैं, लेकिन सबसे बुनियादी मुद्दा यह है कि इस तरह के समारोह भाव में इस्तेमाल किया जा सकता है।
एक फार्म पर एक बटन के लिए सेटिंग क्लिक पर
उदाहरण के लिए, एक में, आप आम तौर पर एक VBA [इवेंट कोड] दिनचर्या कि बटन से जुड़ी हो सकती है।
लेकिन अगर आप भी इस तरह संपत्ति शीट में एक अभिव्यक्ति जगह कर सकते हैं: ऊपर अभिव्यक्ति में
=MyUserFunction()
ऊपर एक आसान टिप है, के बाद से तो आप एक फार्म पर 10 नियंत्रण हाइलाइट कर सकते हैं, और प्रकार और आपने उपर्युक्त फ़ंक्शन को उन 10 बटनों पर असाइन किया है। आप उपरोक्त उपरोक्त नहीं कर सकते हैं।
एक और महत्वपूर्ण अंतर आप एक फार्म या रिपोर्ट पर एक पाठ बॉक्स के लिए डेटा स्रोत के रूप में एक समारोह (अभिव्यक्ति) का उपयोग कर सकते हैं (फिर से आप एक उप के साथ ऐसा नहीं कर सकते) है।
एक और महत्वपूर्ण अंतर यह है कि आप इन कार्यों को एसक्यूएल में उपयोग कर सकते हैं। यह वास्तव में शानदार क्षमता है क्योंकि आपके पास क्वेरी की प्रत्येक पंक्ति के लिए "रन" कोड हो सकता है। और इसका मतलब है कि आप एसक्यूएल की क्षमता और कार्यात्मक रूप से विस्तार कर सकते हैं।
और आप इस विचार का उपयोग एसक्यूएल क्वेरी में वीबीए चर प्रदर्शित करने के लिए भी कर सकते हैं क्योंकि आप बस एक सार्वजनिक फ़ंक्शन बनाते हैं जो वीबीए वैरिएबल देता है और इसका उपयोग क्वेरी में किया जा सकता है - हालांकि आप किसी क्वेरी में वीबीए चर का उपयोग नहीं कर सकते !
और यह एसक्यूएल के विस्तार को खोलता है अंतहीन विचारों:
तो मैं कहा जाता है कल एक सार्वजनिक समारोह का निर्माण कर सकते()
Public Function Tomorrow() as date
Tomorrow() = date() + 1
End Function.
अब क्वेरी बिल्डर में, मैं जा सकते हैं:
Select FirstName, lastName, Tomorrow() as NextDay from tblCustomers
और आप कस्टम रूपांतरण भी कर सकते हैं जैसे:
Select FirstName, LastName, Celsius([DailyGreenHouseTemp]) from tblGreenHouse.
ऊपर डेली तापमान पढ़ने फारेनहाइट में में कर सकता है और आप बस एक सार्वजनिक समारोह इस तरह सेल्सियस बुलाया परिभाषित करने के लिए है:
Public Function Celsius(Temperature As Variant) As Variant
Celsius = (Temperature * 1.8) + 32
End Function
अब ऊपर समारोह सरल है, जबकि, यह जटिल रिकॉर्ड कर सकता है एक जटिल प्रसंस्करण सेट तापमान और आर्द्रता के आधार पर एक फूल के बर्तन के ऊपर नमी निर्धारित करने के लिए एल्गोरिदम।
तो एक बार जब हम इस तरह के एक सार्वजनिक समारोह को परिभाषित करते हैं, तो मुख्य अवधारणा इस तरह का एक फ़ंक्शन न केवल वीबीए कोड में अभिव्यक्ति के रूप में उपयोग किया जा सकता है, लेकिन यह भी आश्चर्यजनक उपयोग किया जा सकता है कि इस क्षमता में एसक्यूएल शामिल है।
तो भी कोड में, आप जा सकते हैं:
If MyCustomfucntion(SomeVar) = lngTestValue then
फिर ऊपर में, आप एक उप VBA भाव में उपयोग नहीं कर सकते।
और एक्सेस में रिबन के लिए कस्टम एक्सएमएल का उपयोग करते समय और भी दिलचस्प है, तो यदि आप "क्रिया पर" विशेषता के लिए फ़ंक्शन() अभिव्यक्ति का उपयोग करते हैं तो आप रिबन कॉल बैक की आवश्यकता से बच सकते हैं। इससे भी बेहतर यह है कि रिबन उन कार्यों() को वर्तमान रूप में कॉल करेगा, न कि सार्वजनिक कोड मॉड्यूल जैसे कि आपको रिबन कॉल बैक के साथ करना होगा।
मैं शायद अंतर के रूप में अन्य 10+ पृष्ठों के लिए टाइप कर सकता हूं, लेकिन मुझे लगता है कि यह अनावश्यक होना शुरू हो जाएगा और मैं यहां किसी भी तरह से घनत्व नहीं दिखाना चाहता हूं।
तो वीबीए में एक उप और फ़ंक्शन के बीच मूल अंतर या वास्तव में अधिकांश प्रोग्रामिंग भाषाओं में मूल रूप से वही है।
और एक्सेस में किसी फ़ंक्शन का उपयोग करने या किसी भी प्रोग्रामिंग भाषा के बारे में केवल लाभ समान हैं। उदाहरण के लिए मैं टी-एसक्यूएल (स्केलर) में उपयोगकर्ता परिभाषित फ़ंक्शन को परिभाषित कर सकता हूं - और फिर आप उस टी-एसक्यूएल फ़ंक्शन का उपयोग अपने किसी भी टी-एसक्यूएल कोड या यहां तक कि क्वायर जो आप बनाते हैं और एसक्यूएल सर्वर के लिए उपयोग करते हैं, का उपयोग करने के लिए स्वतंत्र हैं।
तो यह सब और एक फ़ंक्शन के बीच बुनियादी और सरल अंतर है, और मुझे लगता है कि जो लोग कंप्यूटर कोड लिख चुके हैं, वे किसी भी प्रोग्रामिंग भाषा में ही उपरोक्त और एक समारोह के बीच उपरोक्त महत्वपूर्ण और उपयोगी अंतरों को महसूस करेंगे ।
* * subroutine * का एक कॉल एक बयान है; फ़ंक्शन का कॉल एक * अभिव्यक्ति * है। Subroutines परिस्थितियों के लिए हैं जब आप वापसी मूल्य के उत्पादन के बिना कुछ करने की जरूरत है। – dasblinkenlight
सभी, प्रतिक्रियाओं के लिए धन्यवाद, मैं किए गए अंकों की सराहना करता हूं, हालांकि मैं वास्तव में क्या करने की कोशिश कर रहा हूं, अगर मुझे एक दिनचर्या चलाने की ज़रूरत है जो मूल्य वापस नहीं करता है। क्या एक उप किसी फ़ंक्शन पर कोई लाभ लाएगा, @TheNewOne ने उप निष्पादन समय को हाइलाइट किया है बेहतर हो सकता है लेकिन यह एक सिद्ध निष्कर्ष के रूप में नहीं पढ़ता है? –
मुझे बाइट्स.com पर एक चर्चा मिली जो कि ब्याज की हो सकती है। यह सुनिश्चित नहीं है कि आप सब के साथ सिद्ध निष्कर्ष निकालने के लिए (बहुत मामूली) प्रदर्शन सुधार का न्याय करेंगे या नहीं। निजी तौर पर, मैं एक साधारण मानदंड का उपयोग करता हूं: प्रक्रिया तब तक उप होगी जब तक कि मुझे किसी फ़ंक्शन के एएस डेटाटाइप असाइनमेंट के साथ कोई मान वापस करने की आवश्यकता न हो। http://bytes.com/topic/access/answers/209591- कार्यक्षमता- vs-sub-public-vs-private – HansUp