परिचय।
पिछले हफ्ते हमने एक साधारण कस्टम क्लास ऑब्जेक्ट . का संक्षिप्त परिचय दिया था लंबाई . के लिए केवल दो गुणों के साथ और चौड़ाई मान। क्षेत्र . की गणना के लिए एक विधि लंबाई और चौड़ाई के मूल्यों के साथ कुछ भी। आशा है कि आप एमएस-एक्सेस कस्टम क्लास मॉड्यूल की मूल बातें समझ गए होंगे। यदि नहीं, तो यहां लिंक है:एमएस-एक्सेस क्लास मॉड्यूल और वीबीए। कृपया जारी रखने से पहले पृष्ठ पर जाएँ।
क्लास मॉड्यूल ऑब्जेक्ट आपके प्रोग्राम में बहुत सारे कोड सहेजते हैं। जब आपको कुछ ऐसा मिलता है जो आप कोड में बार-बार करते हैं तो क्लास मॉड्यूल ऑब्जेक्ट के बारे में सोचें। दोहराए जाने वाले कोड को एक उपयोगिता फ़ंक्शन में भी बदला जा सकता है, लेकिन क्लास ऑब्जेक्ट्स के लिए, आपको एक अलग तरीका अपनाना होगा।
एक साधारण कार्य के लिए, क्लास मॉड्यूल ऑब्जेक्ट के कार्यों को परिष्कृत करने में अधिक कोड लग सकता है, लेकिन आपके मुख्य मॉड्यूल प्रोग्राम सरल होंगे और विकसित और परिष्कृत सभी जटिल कोड दूसरों से छिपे रहेंगे।
लेकिन अभी के लिए, हमारे पास एक साधारण क्लास मॉड्यूल है, हम कोशिश करेंगे कि कई वस्तुओं के क्षेत्रफल की गणना करने के लिए वस्तुओं की एक सरणी कैसे बनाई जाए।
द क्लासअरे () सब-रूटीन।
मानक मॉड्यूल में नमूना VBA कोड ClsArea क्लास के पांच ऑब्जेक्ट्स का एक ऐरे बनाता है और डीबग विंडो में उनके प्रॉपर्टी वैल्यू और मेथड रिजल्ट को प्रिंट करता है। निम्नलिखित कोड को एक मानक मॉड्यूल में कॉपी और पेस्ट करें (या बेहतर अगर आप उन्हें टाइप करते हैं, प्रत्येक पंक्ति को बेहतर तरीके से जानने के लिए कि वे क्या करते हैं):
Public Sub ClassArray()
Dim tmpA As ClsArea
Dim CA() As ClsArea
Dim j As Long, title As String
Dim L As Long, U As Long
title = "ClassArray"
For j = 1 To 5 ‘the Loop is set for 5 items
'instantiate temporary ClsArea Object
'to enter input
Set tmpA = New ClsArea
tmpA.strDesc = InputBox(Str(j) & ") Description:", title, "")
tmpA.dblLength = InputBox(Str(j) & ") Enter Length:", title, 0)
tmpA.dblWidth = InputBox(Str(j) & ") Enter Width:", title, 0)
'Redimension Array
ReDim Preserve CA(1 To j) As ClsArea
Set CA(j) = tmpA 'Copy Object to Array
Set tmpA = Nothing 'Remove temporary object from memory.
Next
‘PRINTING SECTION
'Print the Array contents into the Debug Window
L = LBound(CA)
U = UBound(CA)
Debug.Print "Description", "Length", "Width", "Area"
For j = L To U
With CA(j)
Debug.Print .strDesc, .dblLength, .dblWidth, .Area
End With
Next
’stop
'Clear array objects from memory
For j = L To U
Set CA(j) = Nothing
Next
End Sub
कोड के बीच में कहीं क्लिक करें और कोड को निष्पादित करने के लिए F5 दबाएं। एक के बाद एक, 5 अलग-अलग मदों के लिए कीबोर्ड से विवरण, लंबाई और चौड़ाई के लिए मान इनपुट करें।
कार्यक्रम का नमूना संचालन नीचे दिया गया है:
Description Length Width Area Door Mat 5 8 40 Carpet 12 23 276 Bed Room 21 23 483 Store Room 15 25 375 Terrace 40 50 2000
पंक्ति दर पंक्ति कोड की समीक्षा।
आइए लाइन से कोड लाइन की जांच करें। घोषणा क्षेत्र में, हमने एक वस्तु चर घोषित किया है tmpA ClsArea प्रकार का। दूसरी पंक्ति में एक खाली सरणी घोषित CA() ClsArea प्रकार का। कार्यक्रम में बाद में आवश्यक तत्वों की संख्या को फिर से आयाम दिया जाएगा।
अगली दो पंक्तियों में, हमने चर घोषित किया है शीर्षक स्ट्रिंग प्रकार का और j, L, और यू लंबे पूर्णांक प्रकार के चर।
इसके बाद, शीर्षक चर को 'क्लासअरे' स्ट्रिंग के साथ प्रारंभ किया जाता है और इनपुटबॉक्स () फ़ंक्शन में शीर्षक के रूप में उपयोग किया जाएगा। के लिए….अगला लूप को नियंत्रण चर के साथ सेट किया गया है j पांच बार लूप चलाने के लिए। अगली दो टिप्पणी पंक्तियों के बाद, सेट कथन तत्काल (स्मृति आवंटित करता है) tmpA . नाम से स्मृति में ClsArea क्लास ऑब्जेक्ट ।
कोड की अगली तीन पंक्तियाँ strDesc . के लिए इनपुट मान प्रदान करती हैं , dblLength, और dblWidth tmpA क्लास ऑब्जेक्ट के गुण।
टिप्पणी की अगली पंक्ति के बाद, ClsArea क्लास ऑब्जेक्ट (CA) को 1 से j के लिए पुनः आयाम दिया गया है टाइम्स (1 से 1 बार) मौजूदा ऑब्जेक्ट तत्वों को संरक्षित करके, यदि कोई हो (यह ऐरे में पहला ऑब्जेक्ट है)। यह ReDim . के माध्यम से बढ़ता रहेगा कथन, 1 से 2, 1 से 3, 1 से 4, और 1 से 5 तक, For के भीतर पुराने ऑब्जेक्ट मानों को संरक्षित करके। . . अगला लूप। संरक्षित करें कीवर्ड सुनिश्चित करता है कि मौजूदा सरणी ऑब्जेक्ट खो नहीं गए हैं।
नोट: पुन:आयाम कथन निर्दिष्ट ऑब्जेक्ट तत्वों की संख्या को बढ़ाता/घटता है लेकिन संरक्षित के बिना, पहले से लोड किए गए मौजूदा ऑब्जेक्ट को मिटा देता है खोजशब्द।
सेट अगली पंक्ति में कथन tmpA ऑब्जेक्ट को उसके डेटा के साथ CA(j) में कॉपी करता है ClsArea ऑब्जेक्ट नव निर्मित j सरणी तत्व।
अगली पंक्ति tmpA =कुछ भी नहीं सेट करें स्मृति से अस्थायी वस्तु को हटा देता है।
For…अगला लूप इस क्रिया को चार बार दोहराता है ताकि एक के बाद एक नए तात्कालिक अस्थायी ऑब्जेक्ट tmpA में अन्य आइटम इनपुट कर सकें और ऑब्जेक्ट को CA ऑब्जेक्ट ऐरे में कॉपी कर सकें।
अगली दो पंक्तियाँ, टिप्पणी पंक्ति के बाद, ऑब्जेक्ट ऐरे इंडेक्स रेंज (सबसे कम और उच्चतम इंडेक्स नंबर ढूँढता है।
अगला डीबग.प्रिंट करें स्टेटमेंट डिबग विंडो में 14 कॉलम ज़ोन में एक हेडिंग लाइन प्रिंट करता है। के लिए. . . अगला L . के साथ लूप और यू बाउंड ऐरे इंडेक्स नंबर रेंज प्रत्येक ऑब्जेक्ट को ऐरे CA, . से एक्सेस करने के लिए आंतरिक स्टेटमेंट चलाता है नियंत्रण चर में सूचकांक संख्या के साथ j.
वर्तमान ऑब्जेक्ट संदर्भ साथ में सेट है। . . के साथ समाप्त करें ऑब्जेक्ट नाम CA(j).strDesc, CA(j.dblLength, CA(j).dblWidth को दोहराने के बजाय संरचना, और CA(j).क्षेत्र डिबग विंडो पर ऑब्जेक्ट के प्रॉपर्टी वैल्यू और मेथड एरिया () परिणामों को प्रिंट करने के लिए।
टिप्पणी चिह्न को ‘रोकें . से हटा दें स्टॉप स्टेटमेंट पर प्रोग्राम में पॉज बनाने के लिए स्टेटमेंट। कोड को फिर से चलाएँ और 5 आइटम विवरण दर्ज करें ताकि आप ऐरे ऑब्जेक्ट के साथ प्रयोग कर सकें। आप नीचे दिखाए गए अनुसार डीबग विंडो पर किसी भी मान को संपादित या प्रिंट करने के लिए ऐरे इंडेक्स नंबर के साथ किसी भी ऑब्जेक्ट प्रॉपर्टी को चुनिंदा रूप से संबोधित कर सकते हैं।
कथन सेट CA(j) =कुछ नहीं फॉर के भीतर। . . अगला लूप मेमोरी से एक-एक करके ऐरे ऑब्जेक्ट्स को साफ़ करता है।
क्लास ऑब्जेक्ट ऐरे को फ़ंक्शन पैरामीटर के रूप में पास करें।
हम क्लास ऑब्जेक्ट ऐरे को एक प्रोग्राम के पैरामीटर के रूप में पास कर सकते हैं, जैसा कि हमने यूजर-डिफ़ाइंड डेटा टाइप के साथ किया था।
आइए हम मुख्य प्रोग्राम के प्रिंटिंग सेक्शन कोड को काटकर और इसे नए प्रोग्राम में रखकर एक साधारण प्रिंटिंग सबरूटीन बनाएं।
ClassArray() उप-नियमित कोड की प्रतिलिपि बनाएँ, इसे उसी मानक मॉड्यूल में चिपकाएँ और नाम को ClassArray2(), के रूप में बदलें जैसा कि नीचे दिखाया गया है।
Public Sub ClassArray2()
Dim tmpA As ClsArea
Dim CA() As ClsArea
Dim j As Long, title As String
Dim L As Long, U As Long
title = "ClassArray"
For j = 1 To 5 ‘the Loop is set for 5 items
'instantiate temporary ClsArea Object
'to enter input
Set tmpA = New ClsArea
tmpA.strDesc = InputBox(Str(j) & ") Description:", title, "")
tmpA.dblLength = InputBox(Str(j) & ") Enter Length:", title, 0)
tmpA.dblWidth = InputBox(Str(j) & ") Enter Width:", title, 0)
'Redimension Array
ReDim Preserve CA(1 To j) As ClsArea
Set CA(j) = tmpA 'Copy Object to Array
Set tmpA = Nothing 'Remove temporary object from memory.
Next
‘PRINTING SECTION
'Print the Array contents into the Debug Window
L = LBound(CA)
U = UBound(CA)
Debug.Print "Description", "Length", "Width", "Area"
For j = L To U
With CA(j)
Debug.Print .strDesc, .dblLength, .dblWidth, .Area
End With
Next
’stop
'Clear array objects from memory
For j = L To U
Set CA(j) = Nothing
Next
End Sub
बिना मुद्रण अनुभाग के ClassArray2 कोड।
नीचे दिए गए अनुसार एक नया सब-रूटीन बनाएं:
Public Sub ClassPrint(ByRef clsPrint() As ClsArea) Dim L As Long, U As Long Dim j As Long End Sub
प्रिंटिंग सेक्शन को 'ClassArray2() प्रोग्राम में स्टॉप स्टेटमेंट तक हाइलाइट करें, कोड के हाइलाइट किए गए क्षेत्र को काटें, और इसे डिम के नीचे पेस्ट करें। क्लासप्रिंट () . में बयान कार्यक्रम। दोनों संहिताओं का संशोधित संस्करण नीचे दिया गया है:
Public Sub ClassArray2()
Dim tmpA As ClsArea
Dim CA() As ClsArea
Dim j As Long, title As String
title = "ClassArray"
For j = 1 To 5 ‘the Loop is set for 5 items
'instantiate temporary ClsArea Object
'to enter input
Set tmpA = New ClsArea
tmpA.strDesc = InputBox(Str(j) & ") Description:", title, "")
tmpA.dblLength = InputBox(Str(j) & ") Enter Length:", title, 0)
tmpA.dblWidth = InputBox(Str(j) & ") Enter Width:", title, 0)
'Redimension Array
ReDim Preserve CA(1 To j) As ClsArea
Set CA(j) = tmpA 'Copy Object to Array
Set tmpA = Nothing 'Remove temporary object from memory.
Next
Call ClassPrint(CA) ‘Pass the Object Array to print routine
'Clear array objects from memory
For j = L To U
Set CA(j) = Nothing
Next
End Sub
क्लासप्रिंट() प्रोग्राम।
Public Sub ClassPrint(ByRef clsPrint() As ClsArea) Dim L As Long, U As Long Dim j As Long 'Printing Section 'Print the Array Contents into the Debug Window. L = LBound(clsPrint) U = UBound(clsPrint) Debug.Print "Description", "Length", "Width", "Area" For j = L To U With clsPrint(j) Debug.Print .strDesc, .dblLength, .dblWidth, .Area End With Next End Sub
दोनों कार्यक्रमों में कोड परिवर्तन की जाँच करें और जहाँ भी लागू हो, सुधार करें। ClassArray2 () कोड के बीच में क्लिक करें और प्रोग्राम चलाने के लिए F5 दबाएं।
पहले प्रोग्राम में कॉल स्टेटमेंट CA क्लास ऑब्जेक्ट ऐरे को ByRef पैरामीटर के रूप में ClassPrint () सबरूटीन में पास करता है। प्रोग्राम ऑब्जेक्ट प्रॉपर्टीज को प्रिंट करता है और फंक्शन एरिया () को कैलकुलेट करने और वैल्यू को प्रिंट करने के लिए वापस करने के लिए कॉल करता है।
अगले सप्ताह हम सीखेंगे कि वॉल्यूम की गणना करने के लिए एक नया VBA क्लास ऑब्जेक्ट बनाने के लिए हमारे ClsArea क्लास मॉड्यूल को बेस क्लास के रूप में कैसे उपयोग किया जाए। किसी चीज़ की।
- एमएस-एक्सेस क्लास मॉड्यूल और वीबीए
- एमएस-एक्सेस वीबीए क्लास ऑब्जेक्ट एरेज़
- एमएस-एक्सेस बेस क्लास और व्युत्पन्न ऑब्जेक्ट
- VBA बेस क्लास और व्युत्पन्न ऑब्जेक्ट-2
- आधार वर्ग और व्युत्पन्न वस्तु प्रकार
- एमएस-एक्सेस रिकॉर्डसेट और क्लास मॉड्यूल
- एक्सेस क्लास मॉड्यूल और रैपर क्लासेस
- आवरण वर्ग कार्यक्षमता परिवर्तन
- सुश्री-पहुंच और संग्रह वस्तु मूल बातें
- एमएस-एक्सेस क्लास मॉड्यूल और कलेक्शन ऑब्जेक्ट
- संग्रह वस्तु और प्रपत्र में तालिका रिकॉर्ड
- डिक्शनरी ऑब्जेक्ट बेसिक्स
- डिक्शनरी ऑब्जेक्ट बेसिक्स-2
- शब्दकोश ऑब्जेक्ट की और आइटम को सॉर्ट करना
- डिक्शनरी से फ़ॉर्म में रिकॉर्ड प्रदर्शित करें
- कक्षा वस्तुओं को शब्दकोश आइटम के रूप में जोड़ें
- फॉर्म पर क्लास ऑब्जेक्ट डिक्शनरी आइटम अपडेट करें