एक्सेल VBA सबरूटीन: उदाहरण के साथ VBA में Sub को कैसे कॉल करें

⚡ स्मार्ट सारांश

Excel VBA सब रूटीन कोड के एक ब्लॉक को समूहित करता है जो कोई मान लौटाए बिना कोई कार्य करता है। यह पृष्ठ नामकरण नियमों, सब रूटीन के सिंटैक्स, कमांड बटन से सब रूटीन को कॉल करने और सब रूटीन और फंक्शन में अंतर को बताता है।

  • 📦 परिभाषा: एक सबरूटीन एक विशिष्ट कार्य करता है और इसे कॉल करने वाले कोड को कोई मान वापस नहीं करता है।
  • ♻️ पुनर्प्रयोग: एक सबरूटीन को प्रोजेक्ट में कहीं से भी कई बार कॉल किया जा सकता है।
  • 🔤 नामकरण नियम: नाम में कोई रिक्त स्थान नहीं होता है, यह किसी अक्षर या अंडरस्कोर से शुरू होता है, और यह कभी भी VBA कीवर्ड नहीं होता है।
  • 🧾 सिंटेक्स: Private Sub name(ByVal arg As String) ब्लॉक खोलता है और End Sub इसे बंद करता है।
  • कॉलिंग: कमांड बटन के क्लिक इवेंट से सबरूटीन कॉल होता है और उसके आर्गुमेंट्स पास होते हैं।
  • ▶ ️ सीधे चल रहा है: F5, मैक्रोज़ डायलॉग या कॉल कीवर्ड, ये सभी बिना किसी बटन के सबरूटीन चलाते हैं।
  • 🔁 उप या फ़ंक्शन: जब कोई मान लौटाना आवश्यक हो तो फ़ंक्शन चुनें, अन्यथा सब-फंक्शन चुनें।

एक्सेल VBA सबरूटीन

VBA में सबरूटीन क्या है?

A VBA में सबरूटीन कोड का एक टुकड़ा है जो कोड में वर्णित एक विशिष्ट कार्य करता है लेकिन कोई परिणाम या मान नहीं लौटाता है। सबरूटीन का उपयोग कोड के बड़े टुकड़ों को छोटे प्रबंधनीय भागों में तोड़ने के लिए किया जाता है। सबरूटीन को प्रोग्राम में कहीं से भी कई बार याद किया जा सकता है।

मान लीजिए कि आपने यूजर इनपुट डेटा स्वीकार करने के लिए टेक्स्ट बॉक्स के साथ यूजर इंटरफ़ेस बनाया है। आप एक सबरूटीन बना सकते हैं जो टेक्स्ट बॉक्स की सामग्री को साफ़ करता है। ऐसे परिदृश्य में VBA कॉल सबरूटीन उपयुक्त है क्योंकि आप कोई परिणाम वापस नहीं करना चाहते हैं।

सबरूटीन्स का उपयोग क्यों करें

  • कोड को छोटे प्रबंधनीय कोड में विभाजित करेंएक औसत कंप्यूटर प्रोग्राम में हज़ारों-हज़ार सोर्स कोड लाइनें होती हैं। इससे जटिलता आती है। सबरूटीन प्रोग्राम को कोड के छोटे-छोटे प्रबंधनीय हिस्सों में तोड़कर इस समस्या को हल करने में मदद करते हैं।
  • Code पुनर्प्रयोगमान लीजिए कि आपके पास एक प्रोग्राम है जिसे डेटाबेस तक पहुँचने की आवश्यकता है, प्रोग्राम में लगभग सभी विंडो को डेटाबेस के साथ इंटरैक्ट करने की आवश्यकता होगी। इन विंडो के लिए अलग-अलग कोड लिखने के बजाय, आप एक ऐसा फ़ंक्शन बना सकते हैं जो सभी डेटाबेस इंटरैक्शन को संभालता है। फिर आप इसे अपनी इच्छानुसार किसी भी विंडो से कॉल कर सकते हैं।
  • सबरूटीन और फ़ंक्शन स्व-दस्तावेजीकरण हैंमान लीजिए कि आपके पास एक फ़ंक्शन है calculateLoanInterest और दूसरा फ़ंक्शन है connectToDatabase. सबरूटीन/फ़ंक्शन के नाम को देखकर ही प्रोग्रामर यह बता पाएगा कि प्रोग्राम क्या करता है.

नाम लिखने से पहले, कंपाइलर अपेक्षा करता है कि नाम कुछ संक्षिप्त नियमों का पालन करे।

सबरूटीन और फ़ंक्शन नामकरण के नियम

सबरूटीन्स और फंक्शन्स का उपयोग करने के लिए कुछ नियमों का पालन करना होता है।

  • सबरूटीन या VBA कॉल फ़ंक्शन नाम में स्पेस नहीं हो सकता
  • एक्सेल VBA कॉल सब या फ़ंक्शन का नाम किसी अक्षर या अंडरस्कोर से शुरू होना चाहिए। यह किसी संख्या या विशेष वर्ण से शुरू नहीं हो सकता
  • सबरूटीन या फ़ंक्शन नाम कीवर्ड नहीं हो सकता। कीवर्ड एक ऐसा शब्द है जिसका विशेष अर्थ होता है VBA. Private, Sub, Function, और End आदि जैसे शब्द कीवर्ड के उदाहरण हैं। कंपाइलर इनका उपयोग विशिष्ट कार्यों के लिए करता है।

एक वैध नाम चुने जाने के बाद, घोषणा स्वयं एक निश्चित पैटर्न का अनुसरण करती है।

VBA सबरूटीन सिंटैक्स

इस उदाहरण का अनुसरण करने के लिए आपको एक्सेल में डेवलपर टैब को सक्षम करना होगा। यदि आप नहीं जानते कि डेवलपर टैब को कैसे सक्षम किया जाता है, तो ट्यूटोरियल पढ़ें एक्सेल में VBA नियंत्रण

यहाँ वाक्यविन्यास में,

Private Sub mySubRoutine(ByVal arg1 As String, ByVal arg2 As String)
    'do something
End Sub

वाक्यविन्यास स्पष्टीकरण

Code कार्य
  • “निजी सब mySubRoutine(…)”
  • यहां कीवर्ड “Sub” का उपयोग “mySubRoutine” नामक सबरूटीन घोषित करने और सबरूटीन के मुख्य भाग को प्रारंभ करने के लिए किया जाता है।
  • सबरूटीन के दायरे को निर्दिष्ट करने के लिए Private कीवर्ड का उपयोग किया जाता है
  • “ByVal arg1 स्ट्रिंग के रूप में, ByVal arg2 स्ट्रिंग के रूप में” :
  • यह स्ट्रिंग डेटा प्रकार नाम arg1 और arg2 के दो पैरामीटर घोषित करता है
  • "अंत उप"
  • “End Sub” का उपयोग सबरूटीन के मुख्य भाग को समाप्त करने के लिए किया जाता है

निम्नलिखित सबरूटीन प्रथम और अंतिम नाम स्वीकार करता है और उन्हें संदेश बॉक्स में प्रदर्शित करता है।

अब हम इस Sub Processor को प्रोग्राम और निष्पादित करने जा रहे हैं। आइये इसे देखें।

VBA में Sub को कैसे कॉल करें

नीचे VBA में Sub को कॉल करने की चरण-दर-चरण प्रक्रिया दी गई है:

  1. उपयोगकर्ता इंटरफ़ेस डिज़ाइन करें और उपयोगकर्ता नियंत्रणों के लिए गुण सेट करें।
  2. सबरूटीन जोड़ें
  3. सबरूटीन को कॉल करने वाले कमांड बटन के लिए क्लिक इवेंट कोड लिखें
  4. आवेदन का परीक्षण करें

चरण 1) यूजर इंटरफेस

उपयोगकर्ता इंटरफ़ेस को नीचे दी गई छवि के अनुसार डिज़ाइन करें।

VBA में Sub को कैसे कॉल करें

निम्नलिखित गुण सेट करें: हम जो गुण सेट कर रहे हैं:

एस / एन नियंत्रण संपत्ति वैल्यू
1 कमांडबटन1 नाम btnपूर्णनाम प्रदर्शित करें
2 शीर्षक पूरा नाम सबरूटीन

आपका इंटरफ़ेस अब इस प्रकार दिखना चाहिए।

VBA में Sub को कैसे कॉल करें

चरण 2) सबरूटीन जोड़ें

  1. कोड विंडो खोलने के लिए Alt + F11 दबाएँ
  2. निम्नलिखित सबरूटीन जोड़ें
Private Sub displayFullName(ByVal firstName As String, ByVal lastName As String)
    MsgBox firstName & " " & lastName
End Sub

यहाँ कोड में,

Code क्रियाएँ
  • “निजी उप displayFullName(…)”
  • यह एक निजी सबरूटीन displayFullName घोषित करता है जो दो स्ट्रिंग पैरामीटर्स को स्वीकार करता है।
  • “ByVal firstName As String, ByVal lastName As String”
  • यह दो पैरामीटर वैरिएबल घोषित करता है firstName और lastName
  • MsgBox प्रथम नाम अंतिम नाम"
  • यह संदेश को कॉल करता हैBox संदेश बॉक्स प्रदर्शित करने के लिए अंतर्निहित फ़ंक्शन। फिर यह 'firstName' और 'lastName' चर को पैरामीटर के रूप में पास करता है।
  • एम्परसेंड “&” का उपयोग दो चरों को संयोजित करने और उनके बीच रिक्त स्थान जोड़ने के लिए किया जाता है।

चरण 3) सबरूटीन को कॉल करना

कमांड बटन क्लिक इवेंट से सबरूटीन को कॉल करना।

  • नीचे दी गई छवि में दिखाए गए अनुसार कमांड बटन पर राइट क्लिक करें। व्यू चुनें। Code.
  • कोड संपादक खुल जाएगा

VBA में Sub को कैसे कॉल करें

btnDisplayFullName कमांड बटन के क्लिक इवेंट के लिए कोड एडिटर में निम्नलिखित कोड जोड़ें।

Private Sub btnDisplayFullName_Click()
    displayFullName "John", "Doe"
End Sub

आपकी कोड विंडो अब इस प्रकार दिखाई देगी

VBA में Sub को कैसे कॉल करें

परिवर्तन सहेजें और कोड विंडो बंद करें.

चरण 4) कोड का परीक्षण

डेवलपर टूलबार पर डिज़ाइन मोड को 'ऑफ' करें। जैसा कि नीचे दिखाया गया है।

VBA में Sub को कैसे कॉल करें

चरण 5) कमांड बटन 'फुलनेम सबरूटीन' पर क्लिक करें।

आपको निम्नलिखित परिणाम मिलेंगे

VBA में Sub को कैसे कॉल करें

ऊपर दी गई एक्सेल फ़ाइल डाउनलोड करें Code

बटन सुविधाजनक तो है, लेकिन यह सबरूटीन शुरू करने का एकमात्र तरीका नहीं है, और विकास के दौरान यह शायद ही कभी सबसे तेज़ तरीका होता है।

बिना बटन के सबरूटीन कैसे चलाएं

कोड लिखते समय, किसी सबरूटीन को टेस्ट करने के लिए शीट में कंट्रोल जोड़ना समय की बर्बादी है। VBA इसे चलाने के चार अन्य तरीके प्रदान करता है, और प्रत्येक तरीका डेवलपमेंट साइकिल के अलग-अलग चरणों के लिए उपयुक्त है।

  • एडिटर में F5 दबाएं: सब-फंक्शन के अंदर कहीं भी कर्सर रखें और F5 दबाएं। यह तुरंत चल जाएगा। यह तभी काम करेगा जब सब-फंक्शन कोई आर्गुमेंट न ले, क्योंकि VBA के पास देने के लिए कोई मान नहीं होते।
  • F8 दबाकर आगे बढ़ें: एक ही रन को एक-एक लाइन करके चलाएं, ताकि आप लोकल विंडो में प्रत्येक वेरिएबल में होने वाले बदलाव को देख सकें। इसका उपयोग तब करें जब परिणाम गलत हो और आपको यह देखना हो कि गलती कहाँ हुई है।
  • मैक्रोज़ डायलॉग का उपयोग करें: डेवलपर टैब पर, मैक्रोज़ पर क्लिक करें, नाम चुनें और रन पर क्लिक करें। इस सूची में केवल बिना आर्गुमेंट वाले पब्लिक सब दिखाई देते हैं, इसलिए आमतौर पर हेल्पर सब को प्राइवेट घोषित किया जाता है।
  • इसे किसी अन्य सब से कॉल करें: यह वह विधि है जिसका उपयोग किसी भी सब के लिए किया जाता है जो आर्गुमेंट लेता है, और जिस पर ऊपर दिया गया कमांड बटन निर्भर करता है।

अंतिम विकल्प के दो स्वीकृत रूप हैं। नाम के बाद केवल तर्क लिखना काम करता है, और स्पष्ट रूप से कॉल कीवर्ड का उपयोग करना भी काम करता है, लेकिन दोनों में ब्रैकेट का नियम अलग-अलग है।

Sub RunTheGreeting()
    ' Form 1: no Call keyword, no brackets
    displayFullName "John", "Doe"

    ' Form 2: Call keyword, brackets required
    Call displayFullName("Jane", "Roe")
End Sub

दोनों लाइनें बिल्कुल एक ही काम करती हैं। कॉल कीवर्ड के बिना ब्रैकेट लिखकर दोनों रूपों को मिलाना, सब फ़ंक्शन में एक से अधिक आर्गुमेंट होने पर "Expected: =" कंपाइल एरर का सबसे आम कारण है।

VBA में सब और फंक्शन के बीच अंतर

VBA में Sub और Function दो प्रकार की प्रक्रियाएं होती हैं, और शुरुआती लोग अक्सर गलत प्रक्रिया चुन लेते हैं। निर्णायक प्रश्न सरल है: क्या कॉलिंग कोड को कोई मान वापस चाहिए?

Feature उप समारोह
एक मान लौटाता है नहीं हां, फ़ंक्शन नाम को सौंपा गया है
घोषित किया गया उप ... अंत उप फ़ंक्शन … फ़ंक्शन समाप्त
कहा जाता है अपनी ही पंक्ति पर एक बयान किसी व्यंजक का भाग, उदाहरण के लिए x = myFunc(2)
वर्कशीट सेल में उपयोग किया जा सकता है नहीं हां, उपयोगकर्ता द्वारा परिभाषित फ़ंक्शन के रूप में
विशिष्ट उपयोग शीट को फॉर्मेट करें, इनपुट साफ़ करें, संदेश दिखाएँ कुल योग की गणना करें, मान को परिवर्तित करें, डेटा खोजें

जब कोड वर्कबुक पर कार्य करता है तो सब का उपयोग करें, और VBA फ़ंक्शन जब कोड ऐसा उत्तर उत्पन्न करता है जिसे कोई और चीज उपयोग करती है।

अक्सर पूछे जाने वाले प्रश्न

एक प्राइवेट सब को केवल उसी मॉड्यूल के अंदर से कॉल किया जा सकता है जो इसे घोषित करता है। एक पब्लिक सब प्रोजेक्ट के सभी मॉड्यूल के लिए दृश्यमान होता है और मैक्रोज़ डायलॉग में केवल यही एक प्रकार दिखाई देता है।

ByVal एक कॉपी पास करता है, इसलिए सबरूटीन कॉलर के वेरिएबल को बदल नहीं सकता। ByRef वेरिएबल को ही पास करता है, इसलिए कोई भी बदलाव कॉलर को दिखाई देता है। जब इनमें से कोई भी कीवर्ड नहीं लिखा जाता है, तो ByRef डिफ़ॉल्ट होता है।

Exit Sub स्टेटमेंट का उपयोग करें। यह प्रक्रिया को उस बिंदु पर रोक देता है और जिसने भी इसे कॉल किया है उसे नियंत्रण वापस कर देता है, जो सत्यापन परीक्षण विफल होने पर समय से पहले बाहर निकलने के लिए उपयोगी है।

जी हां। मैक्रो को पेस्ट करें और एक एआई सहायक संबंधित पंक्तियों को समूहित करेगा, प्रत्येक नए सब के लिए एक वर्णनात्मक नाम सुझाएगा और मूल कोड को कॉल के एक छोटे क्रम के रूप में पुनः लिखेगा। वर्कबुक की एक प्रति पर परिणाम का परीक्षण करें।

जी हां। त्रुटि संदेश और कॉलिंग लाइन दें, और एक एआई सहायक कॉल कीवर्ड के बिना कोष्ठक का उपयोग, गलत तर्क संख्या, या बेमेल डेटा प्रकार जैसे कारणों की पहचान करेगा, और फिर सही लाइन प्रदान करेगा।

इस पोस्ट को संक्षेप में इस प्रकार लिखें: