2012-12-11 30 views
9

एक वर्ग मॉड्यूल अब तक में Let संपत्ति का उपयोग कर के मेरे समझ आप इसे इस प्रकार वर्ग मॉड्यूल में स्थापित करता है इसलिए इस तरह गुण सेट:वीबीए कक्षा मॉड्यूल की संपत्ति दें - क्या यह कई तर्क हो सकता है?</p> <pre><code>Dim pName as String Public Property Let Name(Value As String) pName = Value End Property </code></pre> <p>आप और फिर बाद आप इस वर्ग आप कर सकते हैं की एक वस्तु बना लिया है:

MyObject.Name = "Larry" 



प्रश्न: क्या यह संभव है किसी भी तरह एक वर्ग संपत्ति में कई तर्क में प्रवेश के लिए? उदाहरण के लिए:

Dim pFirstName as String, pLastName as String 
Public Property Let Name(FirstName As String, LastName As String) 
    pFirstName = FirstName 
    pLastName = LastName 
End Property 

फिर आप कक्षा के बाहर इस संपत्ति को सेट करने के बारे में कैसे जाएंगे?

MyObject.Name = ?? 

या यह सिर्फ इतना आसान नहीं है?

+1

एक एकल संपत्ति में दो समान नहीं हो सकते ters, हालांकि आप एक सरणी का उपयोग कर सकते हैं। इस तरह के मामले में 'उपनाम' (पहले, अंतिम) ' –

+0

धन्यवाद जैसे नियमित उप का उपयोग करना बेहतर होता है। क्या आप वाकई सरणी के साथ करना संभव है? जब मैं कोशिश करता हूं तो मैं "सरणी को असाइन नहीं कर सकता" त्रुटि प्राप्त करता रहता हूं। – mattboy

+0

@ मैटबॉय - मैंने आपको यह दिखाने के लिए अपने जवाब में जोड़ा है कि आप जिस डेटा को चाहते हैं उसके साथ आप कैसे लौट सकते हैं या अधिक जटिल वस्तु कैसे कर सकते हैं। – InContext

उत्तर

7

अगर आप इस तर्क को समाहित करना चाहते हैं तो अपनी टिप्पणी के अनुसार आप नीचे दिए गए कुछ का उपयोग कर सकते हैं।

नीचे उप और फ़ंक्शन शामिल है।

Public Sub testing() 

    Dim t As Person 

    Set t = PersonData("John", "Smith") 

End Sub 


Public Function PersonData(firstName As String, lastName As String) As Person 

    Dim p As New Person 

    p.firstName = firstName 
    p.lastName = lastName 

    Set PersonData = p 

End Function 

व्यक्ति कक्षा::

Public Sub testing() 
Dim myPerson As New Person 
myPerson.SetName "KaciRee", "Software" 

End Sub 

व्यक्ति कक्षा:: इस प्रदर्शन करने के लिए वर्ग के भीतर सार्वजनिक उप प्रक्रिया के रूप में

Dim pFirstName As String, pLastName As String 

Public Property Let FirstName(FirstName As String) 
    pFirstName = FirstName 
End Property 

Public Property Get FirstName() As String 
    FirstName = pFirstName 
End Property 

Public Property Let LastName(LastName As String) 
    pLastName = LastName 
End Property 

Public Property Get LastName() As String 
    LastName = pLastName 
End Property 
+1

धन्यवाद, लेकिन मैं एक पंक्ति में सब कुछ स्थापित करने के लिए एक तरह से करने के लिए उम्मीद कर रही थी जब वस्तु बनाने के बजाय पिछले के लिए पहला नाम के लिए एक पंक्ति, एक होने नाम और अन्य पंक्तियों के लिए जो कुछ भी हो सकता है। लेकिन मुझे लगता है कि ऐसा करने के लिए आपको बस संपत्ति के बजाय बस एक उप बनाने की आवश्यकता है। – mattboy

+0

मेरा संपादन देखें। मुझे लगता है कि एक समारोह जो एक उप के बजाय व्यक्ति वर्ग रिटर्न कॉल करने के लिए अपने बेहतर उपयोग। आप IntelliSense क्षेत्रों पर है और इसकी दृढ़ता से टाइप किया है। – InContext

1

उपयोग समारोह एक व्यक्ति ऑब्जेक्ट

Dim pFirstName As String, pLastName As String 

Public Property Let FirstName(FirstName As String) 
    pFirstName = FirstName 
End Property 

Public Property Get FirstName() As String 
    FirstName = pFirstName 
End Property 

Public Property Let LastName(LastName As String) 
    pLastName = LastName 
End Property 

Public Property Get LastName() As String 
    LastName = pLastName 
End Property 

Public Sub SetName(FirstName As String, LastName As String) 
pFirstName = FirstName 
pLastName = LastName 
End Sub