यह ट्यूटोरियल वीबीए में सार्वजनिक और निजी घोषणाओं के बीच अंतर और मॉड्यूल को निजी के रूप में निर्दिष्ट करने के तरीके की व्याख्या करेगा।
सार्वजनिक बनाम निजी उप प्रक्रियाएं
प्रक्रियाओं (उप और कार्य) को VBA में निजी या सार्वजनिक घोषित किया जा सकता है। यदि वे सार्वजनिक हैं, तो इसका मतलब है कि आप उन्हें एक्सेल मैक्रो विंडो के भीतर से देख पाएंगे और उन्हें आपके वीबीए प्रोजेक्ट के भीतर कहीं से भी बुलाया जा सकता है। यदि वे निजी हैं, तो उन्हें एक्सेल मैक्रो विंडो में नहीं देखा जा सकता है और केवल उस मॉड्यूल के भीतर उपयोग करने के लिए उपलब्ध हैं जिसमें उन्हें घोषित किया गया है (सामान्य विधियों का उपयोग करके, अन्य मॉड्यूल से निजी प्रक्रियाओं तक पहुंचने के तरीकों के लिए इस आलेख के नीचे देखें) .
सार्वजनिक कार्यों को एक्सेल वर्कशीट में बिल्ट-इन एक्सेल फंक्शन की तरह कहा जा सकता है।
ध्यान दें: चर और स्थिरांक सार्वजनिक या निजी भी हो सकते हैं।
एक्सेल मैक्रो विंडो
डिफ़ॉल्ट रूप से, एक्सेल मैक्रोज़ (अधिकांश वीबीए प्रक्रियाएं) मैक्रो विंडो में कार्यपुस्तिका उपयोगकर्ताओं के लिए दृश्यमान हैं:
ये माने जाते हैं सह लोक प्रक्रियाएं। आप उप कथन से पहले "सार्वजनिक" जोड़कर प्रक्रियाओं को सार्वजनिक रूप से परिभाषित कर सकते हैं:
123 | सार्वजनिक उप हैलोवर्ल्ड ()MsgBox "हैलो वर्ल्ड"अंत उप |
यदि आप प्रक्रिया को सार्वजनिक के रूप में परिभाषित नहीं करते हैं, तो इसे सार्वजनिक मान लिया जाएगा।
किसी प्रक्रिया को निजी घोषित करने के लिए, प्रक्रिया उप विवरण से पहले बस "निजी" जोड़ें:
123 | निजी उप सभी को नमस्कार ()MsgBox "सभी को नमस्कार"अंत उप |
दूसरी प्रक्रिया मैक्रो विंडो में एक्सेल उपयोगकर्ताओं को दिखाई नहीं देगी, लेकिन फिर भी आपके वीबीए कोड में उपयोग की जा सकती है।
तर्क के साथ प्रक्रियाएं
उप प्रक्रियाओं में तर्क हो सकते हैं। तर्क उप प्रक्रिया के लिए इनपुट हैं:
123 | उप हैलो (स्ट्रिंग के रूप में strName)MsgBox "हैलो" और strNameअंत उप |
यदि किसी उप प्रक्रिया में तर्क हैं, तो यह मैक्रो विंडो में कभी भी प्रकट नहीं होगा, भले ही इसे सार्वजनिक घोषित किया गया हो क्योंकि तर्कों को घोषित करने का कोई तरीका नहीं है।
फ़ंक्शंस भी मैक्रो विंडो में कभी भी प्रकट नहीं होंगे, भले ही उन्हें सार्वजनिक घोषित किया गया हो।
एक्सेल में सार्वजनिक कार्यों को सीधे वर्कशीट में 'यूजर डिफाइंड फंक्शन' (यूडीएफ) के रूप में इस्तेमाल किया जा सकता है। यह मूल रूप से एक कस्टम फॉर्मूला है जिसे सीधे वर्कशीट में बुलाया जा सकता है। उन्हें 'इन्सर्ट फंक्शन विंडो' में 'यूजर डिफाइंड' श्रेणी में पाया जा सकता है या सीधे सेल में टाइप किया जा सकता है।
वीबीए प्रोग्रामिंग | कोड जेनरेटर आपके लिए काम करता है!
अपने वीबीए प्रोजेक्ट में मॉड्यूल के बीच प्रक्रियाओं का उपयोग करना
सार्वजनिक प्रक्रियाओं को आपके वीबीए प्रोजेक्ट के भीतर किसी भी मॉड्यूल या फॉर्म से बुलाया जा सकता है।
एक अलग मॉड्यूल से एक निजी प्रक्रिया को कॉल करने का प्रयास करने के परिणामस्वरूप एक त्रुटि होगी (नोट: इस आलेख के नीचे एक कामकाज के लिए देखें)।
ध्यान दें: वर्ग मॉड्यूल में सार्वजनिक प्रक्रियाएं और चर थोड़ा अलग व्यवहार करते हैं और इस लेख के दायरे से बाहर हैं।
विभिन्न मॉड्यूल, एक ही नाम से प्रक्रियाओं को स्टोर कर सकते हैं, बशर्ते वे दोनों निजी हों।
यदि दो या दो से अधिक प्रक्रियाओं का एक ही नाम है और उन्हें सार्वजनिक घोषित किया जाता है, तो आपको कोड चलाते समय एक 'अस्पष्ट नाम का पता चला' संकलन त्रुटि मिलेगी।
निजी मॉड्यूल
डिफ़ॉल्ट रूप से, मॉड्यूल सार्वजनिक होते हैं।
मॉड्यूल को निजी बनाने के लिए, आप निम्न कीवर्ड को मॉड्यूल के शीर्ष पर रखें।
1 | विकल्प निजी मॉड्यूल |
यदि आप एक मॉड्यूल को निजी घोषित करते हैं, तो मॉड्यूल में कोई भी प्रक्रिया एक्सेल उपयोगकर्ताओं को दिखाई नहीं देगी। फंक्शन प्रक्रियाएँ इन्सर्ट फंक्शन विंडो में दिखाई नहीं देंगी लेकिन फिर भी एक्सेल शीट में उपयोग की जा सकती हैं जब तक कि उपयोगकर्ता फ़ंक्शन का नाम जानता है!
मैक्रो विंडो में उप प्रक्रियाएं दिखाई नहीं देंगी लेकिन फिर भी VBA प्रोजेक्ट में उपयोग के लिए उपलब्ध होंगी।
एक अलग मॉड्यूल से एक निजी प्रक्रिया तक पहुँचना
जैसा कि ऊपर उल्लेख किया गया है, निजी प्रक्रियाएं "सामान्य" विधियों द्वारा अन्य कोड मॉड्यूल में पहुंच योग्य नहीं हैं। हालांकि, आप निजी प्रक्रियाओं का उपयोग करके एक्सेस कर सकते हैं आवेदन। भागो वीबीए में उपलब्ध कमांड।
निम्नलिखित 3 मॉड्यूल पर विचार करें।
मॉड्यूल 2 एक है निजी ए . के साथ मॉड्यूल सह लोक उप प्रक्रिया, जबकि मॉड्यूल3 है सह लोक ए के साथ मॉड्यूल निजी उप प्रक्रिया।
मॉड्यूल 1 में, हम हैलो वर्ल्ड को कॉल कर सकते हैं - the विकल्प निजी मॉड्यूल शीर्ष पर हमें उप प्रक्रिया को कॉल करने से नहीं रोकता है - यह केवल मैक्रो विंडो में उप प्रक्रिया को छिपाने के लिए कार्य करता है।
हमें कॉल स्टेटमेंट की भी आवश्यकता नहीं है - यह कोड को पढ़ने में आसान बनाने के लिए है।
कोड भी नीचे इस तरह दिख सकता है:
1234 | उप CallHelloFromPrivate ()'निजी मॉड्यूल से उप कॉल करें'नमस्ते दुनियाअंत उप |
हम VBA का उपयोग करके हैलोवर्ल्ड उप प्रक्रिया भी चला सकते हैं आवेदन। भागो आदेश।
हालांकि मॉड्यूल3 में, गुडमॉर्निंगवर्ल्ड प्रक्रिया को निजी घोषित किया गया है। आप इसे 'सामान्य' यानी कॉल स्टेटमेंट का उपयोग करके किसी अन्य मॉड्यूल से कॉल नहीं कर सकते।
आपको उपयोग करना होगा आवेदन.रन कमांड किसी अन्य मॉड्यूल से एक निजी उप चलाने के लिए।
1234 | उप कॉलगुडमार्निंग ()'सार्वजनिक मॉड्यूल से एक निजी उप चलाएँ'Application.Run ("गुडमार्निंगवर्ल्ड")अंत उप |
ध्यान दें कि आप कब उपयोग करते हैं आवेदन.रन कमांड आदेश, आपको उप प्रक्रिया का नाम उल्टे अल्पविराम में रखना होगा।
अगर हम GoodMorningWorld उप प्रक्रिया को चलाने के लिए कॉल स्टेटमेंट का उपयोग करने का प्रयास करते हैं, तो एक त्रुटि उत्पन्न होगी।