दिलचस्प पोस्ट
एकल लेबल में एकाधिक फ़ॉन्ट रंगों का उपयोग करें एंड्रॉइड में जेक्सिंग का उपयोग कैसे करें चौड़ाई से छोटा नीचे की सीमा के साथ शीर्षक क्या अधिक कुशल है? पाउ के वर्ग का उपयोग करना या उसके साथ ही गुणा करना? फ़ोल्डर में सभी फाइलों के साथ वीआईएम में प्रवेश करना Matlab में तर्कों के रूप में कार्य पासिंग आप फ़ंक्शन के बजाय एक्सपेन <Func <T >> का उपयोग क्यों करेंगे? 'कोई परिवहन नहीं' त्रुटि w / jQuery में AJAX कॉल IE PHP फ़ंक्शन ध्वज, कैसे? जूनिट @ रायल कैसे काम करता है? दृश्य स्टूडियो 2015 इंस्टॉलर इंस्टॉल के दौरान लटकाए हुए हैं? बैकस्लैश दो बार क्यों दिखाई देते हैं? नोडजेएस में मोंगो डेटाबेस में सम्मिलित दस्तावेज के _id प्राप्त करें पीएचपी पढ़ने के लिए उप-निर्देशिकाएं और लूप कैसे करें? वार्ड चेन को तोड़ो और श्रृंखला में कदम पर आधारित फ़ंक्शन को बुलाओ जहां इसे टूटा हुआ है (अस्वीकार कर दिया गया)

VBA.NET के समान तरीके से VBA में कक्षा ऑब्जेक्ट मॉड्यूल के बीच तुलना विधियों का उपयोग कैसे करें?

VBA में नई परियोजना के कारण मैं VB.NET से चले गए, ईमानदार होने के लिए वास्तव में पता नहीं है कि ऑब्जेक्ट क्लासेस के बीच यहाँ कैसे निपटें। मैं क्या चाहता हूं कि विभिन्न वर्ग ऑब्जेक्ट मॉड्यूल के बीच वस्तुओं की तुलना करना है।

जैसे

कक्षा कर्मचारी
गुण: Name , Age
बिंदु है: दो कर्मचारियों के बीच Name तुलना करें

वर्ग: कर्मचारी और प्रबंधक
बिंदु है: कर्मचारी के Name से प्रबंधक के Name की तुलना करें

मैं जानता हूँ कि कैसे VB.NET में है, लेकिन मैं कैसे VBA में विभिन्न वर्ग मॉड्यूल ऑब्जेक्ट की संपत्ति की तुलना कर सकता हूँ?

Solutions Collecting From Web of "VBA.NET के समान तरीके से VBA में कक्षा ऑब्जेक्ट मॉड्यूल के बीच तुलना विधियों का उपयोग कैसे करें?"

VBA क्लास पॉलिमॉर्फिज़्म का समर्थन नहीं करता है इसलिए मैं आपको Employee और Manager वर्गों के बारे में सोचने वाले तरीके को बदलने की सलाह देता हूं।

आपके पास एक आधार वर्ग के रूप में एक Employee वर्ग नहीं है और फिर एक अलग Manager वर्ग जो Employee से निकला है। वे एक सामान्य इंटरफ़ेस को लागू करने वाले 2 अलग-अलग कक्षाएं हो सकते हैं।

मैं इसके बारे में थोड़ी देर में विस्तार से बात करूंगा। अब कुछ उदाहरणों के माध्यम से चलें …


↓ आसान दृष्टिकोण ↓


base वर्ग ( Person ) और बाल कक्षाएं जो आधार वर्ग से प्राप्त होती हैं। ( C #, VB.NET, आदि पर लागू होता है )

लेकिन वीबीए में आपको इसके बारे में यह सोचना होगा:

एक बेस क्लास जो स्थिति का वर्णन करते हुए एक एन्यूम प्रॉपर्टी का खुलासा करता है।

कुछ इस तरह

यहां छवि विवरण दर्ज करें

यहां छवि विवरण दर्ज करें

यह कुछ गुणों को उजागर करने वाला वर्ग है, यह सबसे आसान तरीका है। यह आपको अपने Person वस्तुओं को एक संग्रह में जोड़ने और इंटेलीसेंस के साथ for each लूप के for each आसान उपयोग करने की अनुमति देता है!

यहां छवि विवरण दर्ज करें

गुण तुलना प्रणाली बहुत बहुत आसान होगा

यहां छवि विवरण दर्ज करें

नोट: समान रूप से एन्यूम पर लागू होता है क्योंकि इसके परस्पर रूप से किसी संख्या में परिवर्तित होता है


↓ अधिक जटिल दृष्टिकोण ↓


दो अलग-अलग कक्षाएं, जो दोनों ही सार्वजनिक संपत्तियों का खुलासा करती हैं। उदाहरण के लिए आपके पास एक Employee और Manager वर्ग हैं, जो दोनों एक Person इंटरफ़ेस और एक अतिरिक्त Comparer वर्ग की Compare()

यहां छवि विवरण दर्ज करें

आपके VBA प्रोजेक्ट में आपको 4 क्लास मॉड्यूल और एक मानक मॉड्यूल की आवश्यकता होती है

यहां छवि विवरण दर्ज करें

Person (यह आपका इंटरफ़ेस है)

 Public Property Get Name() As String End Property Public Property Get Age() As Long End Property 

यह क्लास इंटरफ़ेस है जो दोनों Employee और Manager दोनों को कुछ सामान्य कार्यों (नाम और युग के लिए गेटर्स) को साझा करने के लिए कार्यान्वित करने की आवश्यकता है। इंटरफ़ेस होने पर आप इंटरफेस प्रकार वैरिएबल का प्रयोग करके प्रत्येक लूप के लिए ऐसा करने की अनुमति देता है। आप एक मिनट में देखेंगे

Employee और Manager समान हैं जाहिर है आप अपने वास्तविक जीवन समाधान के अनुरूप उन्हें संशोधित कर सकते हैं

 Implements Person Private name_ As String Private age_ As Long Public Property Get Name() As String Name = name_ End Property Public Property Let Name(ByVal Value As String) name_ = Value End Property Public Property Get Age() As Long Age = age_ End Property Public Property Let Age(ByVal Value As Long) age_ = Value End Property Private Property Get Person_Name() As String Person_Name = Name End Property Private Property Get Person_Age() As Long Person_Age = Age End Property 

ComparerCls आप दो वस्तुओं की संपत्तियों या संदर्भों की तुलना करने के लिए इस वर्ग के एक उदाहरण का उपयोग करेंगे । आपको जरूरी नहीं कि इसके लिए एक क्लास होना चाहिए, लेकिन मैं इसे इस तरह पसंद करता हूं।

 Public Enum ComparisonMethod Names = 0 ' default Ages = 1 References = 2 End Enum ' makes names the default comparison method Public Function Compare(ByRef obj1 As Person, _ ByRef obj2 As Person, _ Optional method As ComparisonMethod = 0) _ As Boolean Select Case method Case Ages Compare = IIf(obj1.Age = obj2.Age, True, False) Case References Compare = IIf(obj1 Is obj2, True, False) Case Else Compare = IIf(obj1.Name = obj2.Name, True, False) End Select End Function 

और आपके Module1 कोड

 Option Explicit Sub Main() Dim emp As New Employee emp.Name = "person" emp.Age = 25 Dim man As New Manager man.Name = "manager" man.Age = 25 Dim People As New Collection People.Add emp People.Add man Dim individual As Person For Each individual In People Debug.Print TypeName(individual), individual.Name, individual.Age Next End Sub 

Main() उप चलाएं और तत्काल विंडो में परिणाम देखें

यहां छवि विवरण दर्ज करें

उपरोक्त कोड का सबसे अच्छा हिस्सा यह है कि आप Person अंतरफलक का एक संदर्भ चर बनाते हैं। यह आपको संग्रह में सभी वस्तुओं के माध्यम से लूप की अनुमति देता है जो अंतरफलक लागू करता है। साथ ही, आप इंटेलीज़ेंस का उपयोग कर सकते हैं जो आपके पास बहुत अधिक गुण और फ़ंक्शन होते हैं।


तुलना


कोड पर ComparerCls क्लास में फिर से एक नज़र डालें

यहां छवि विवरण दर्ज करें

मुझे आशा है कि आप देखेंगे कि मैंने यह क्यों अलग कर लिया है कि एक कक्षा हो। इसका उद्देश्य सिर्फ वस्तुओं की तुलना की जा रही है। आप Enum के आदेश को निर्दिष्ट कर सकते हैं और अलग तरह से तुलना करने के लिए Compare() विधि खुद को संशोधित कर सकते हैं। वैकल्पिक पैरामीटर को ध्यान दें जो तुलनात्मक पद्धति के बिना तुलना विधि को कॉल करने की अनुमति देता है।

यहां छवि विवरण दर्ज करें

अब आप फ़ंक्शन की तुलना करने के लिए अलग-अलग मानदंडों को पार करने के आसपास खेल सकते हैं। देखें कि परिणाम कैसा हैं

संयोजनों की कोशिश करो

 emp.Name = "name" man.Name = "name" Comparer.Compare(emp, name, Names) Comparer.Compare(emp, name, References) Comparer.Compare(emp, emp, References) 

यदि कुछ अभी भी अस्पष्ट है तो VBA में इमेजमेंट कीवर्ड के बारे में इस उत्तर को देखें