खोज…
वाक्य - विन्यास
- VB_Name = "ClassOrModuleName" को अट्रैक्ट करें
- VB_GlobalNameSpace = झूठी 'की उपेक्षा करें
- VB_Creatable = झूठी 'को नजरअंदाज करें
- VB_PredeclaredId = {सत्य | असत्य}
- VB_Exposed = {सही | असत्य}
- वैरिएबल नाम दें। VB_VarUserMemId = 0 'शून्य इंगित करता है कि यह कक्षा का डिफ़ॉल्ट सदस्य है।
- वेरिएबल को नाम दें ।VB_VarDescription = "कुछ स्ट्रिंग" इस वेरिएबल के लिए ऑब्जेक्ट ब्राउजर की जानकारी को टेक्स्ट जोड़ता है।
- ProcName को समर्पित करें। VB_Description = "कुछ स्ट्रिंग" प्रक्रिया के लिए ऑब्जेक्ट ब्राउज़र जानकारी पर पाठ जोड़ता है।
- घोषणा करें ।NN.UB_UserMemId = {0 | -4}
- '0: फ़ंक्शन को क्लास का डिफ़ॉल्ट सदस्य बनाता है।
- '-4: निर्दिष्ट करता है कि फ़ंक्शन एक एन्यूमरेटर लौटाता है।
VB_Name
VB_Name वर्ग या मॉड्यूल नाम निर्दिष्ट करता है।
Attribute VB_Name = "Class1"
इस वर्ग का एक नया उदाहरण बनाया जाएगा
Dim myClass As Class1
myClass = new Class1
VB_GlobalNameSpace
VBA में, इस विशेषता को अनदेखा किया जाता है। इसे VB6 से पोर्ट नहीं किया गया था।
VB6 में, यह क्लास का एक डिफ़ॉल्ट ग्लोबल इंस्टेंस (एक "शॉर्टकट") बनाता है ताकि क्लास के सदस्यों को क्लास के नाम का उपयोग किए बिना एक्सेस किया जा सके। उदाहरण के लिए, DateTime
(जैसा कि DateTime.Now
) वास्तव में VBA.Conversion
वर्ग का हिस्सा है।
Debug.Print VBA.Conversion.DateTime.Now
Debug.Print DateTime.Now
VB_Createable
इस विशेषता को अनदेखा किया जाता है। इसे VB6 से पोर्ट नहीं किया गया था।
VB6 में, वर्तमान परियोजना के बाहर कक्षाओं की पहुंच को नियंत्रित करने के लिए VB_Exposed
विशेषता के संयोजन में इसका उपयोग किया गया था।
VB_Exposed=True
VB_Creatable=True
एक Public Class
में परिणाम होगा, जिसे अन्य परियोजनाओं से एक्सेस किया जा सकता है, लेकिन यह कार्यक्षमता VBA में मौजूद नहीं है।
VB_PredeclaredId
एक वर्ग का वैश्विक डिफ़ॉल्ट इंस्टेंस बनाता है। डिफ़ॉल्ट उदाहरण को कक्षा के नाम के माध्यम से एक्सेस किया जाता है।
घोषणा
VERSION 1.0 CLASS
BEGIN
MultiUse = -1 'True
END
Attribute VB_Name = "Class1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
Public Function GiveMeATwo() As Integer
GiveMeATwo = 2
End Function
कॉल
Debug.Print Class1.GiveMeATwo
कुछ मायनों में, यह अन्य भाषाओं में स्थिर कक्षाओं के व्यवहार को अनुकरण करता है, लेकिन अन्य भाषाओं के विपरीत, आप अभी भी कक्षा का एक उदाहरण बना सकते हैं।
Dim cls As Class1
Set cls = New Class1
Debug.Print cls.GiveMeATwo
VB_Exposed
एक वर्ग की इंस्टेंसिंग विशेषताओं को नियंत्रित करता है।
Attribute VB_Exposed = False
Private
बनाता है। इसे वर्तमान परियोजना के बाहर नहीं पहुँचा जा सकता है।
Attribute VB_Exposed = True
परियोजना के बाहर वर्ग Public
गीत का प्रस्ताव है। हालाँकि, VB_Createable
VBA में नजरअंदाज कर दिया है, वर्ग के उदाहरण सीधे बनाया नहीं जा सकता। यह निम्न VB.Net वर्ग के बराबर है।
Public Class Foo
Friend Sub New()
End Sub
End Class
परियोजना के बाहर से एक उदाहरण प्राप्त करने के लिए, आपको उदाहरण बनाने के लिए एक कारखाने का खुलासा करना चाहिए। ऐसा करने का एक तरीका नियमित Public
मॉड्यूल के साथ है।
Public Function CreateFoo() As Foo
CreateFoo = New Foo
End Function
चूंकि सार्वजनिक मॉड्यूल अन्य परियोजनाओं से सुलभ हैं, यह हमें हमारे Public - Not Createable
वर्गों के नए उदाहरण बनाने की अनुमति देता है।
VB_Description
किसी क्लास या मॉड्यूल सदस्य के लिए टेक्स्ट विवरण जोड़ता है जो ऑब्जेक्ट एक्सप्लोरर में दिखाई देता है। आदर्श रूप से, एक सार्वजनिक इंटरफ़ेस / एपीआई के सभी सार्वजनिक सदस्यों का विवरण होना चाहिए।
Public Function GiveMeATwo() As Integer
Attribute GiveMeATwo.VB_Description = "Returns a two!"
GiveMeATwo = 2
End Property
नोट: किसी संपत्ति के सभी एक्सेसर सदस्य ( Get
, Let
, Set
) एक ही विवरण का उपयोग करते हैं।
VB_ [वार] UserMemId
VB_VarUserMemId
(मॉड्यूल-स्कोप वैरिएबल के लिए) और VB_UserMemId
(प्रक्रियाओं के लिए) विशेषताओं का उपयोग VBA में ज्यादातर दो चीजों के लिए किया जाता है।
किसी वर्ग के डिफ़ॉल्ट सदस्य को निर्दिष्ट करना
एक List
वर्ग जो एक Collection
को एनकैप्सुलेट करेगा एक Item
प्रॉपर्टी रखना चाहेगा, इसलिए क्लाइंट कोड ऐसा कर सकता है:
For i = 1 To myList.Count 'VBA Collection Objects are 1-based
Debug.Print myList.Item(i)
Next
लेकिन Item
गुण पर 0 पर सेट VB_UserMemId
विशेषता के साथ, क्लाइंट कोड ऐसा कर सकता है:
For i = 1 To myList.Count 'VBA Collection Objects are 1-based
Debug.Print myList(i)
Next
किसी भी वर्ग में केवल एक सदस्य के पास कानूनी रूप से VB_UserMemId = 0
हो सकता है। गुणों के लिए, Get
एक्सेसर में विशेषता निर्दिष्ट Get
:
Option Explicit
Private internal As New Collection
Public Property Get Count() As Long
Count = internal.Count
End Property
Public Property Get Item(ByVal index As Long) As Variant
Attribute Item.VB_Description = "Gets or sets the element at the specified index."
Attribute Item.VB_UserMemId = 0
'Gets the element at the specified index.
Item = internal(index)
End Property
Public Property Let Item(ByVal index As Long, ByVal value As Variant)
'Sets the element at the specified index.
With internal
If index = .Count + 1 Then
.Add item:=value
ElseIf index = .Count Then
.Remove index
.Add item:=value
ElseIf index < .Count Then
.Remove index
.Add item:=value, before:=index
End If
End With
End Property
For Each
पाश निर्माण के For Each
एक वर्ग के साथ चलने योग्य बनाना
जादुई मूल्य -4
, VB_UserMemId
विशेषता VBA को बताती है कि यह सदस्य एक एन्यूमरेटर देता है - जो क्लाइंट कोड को ऐसा करने की अनुमति देता है:
Dim item As Variant
For Each item In myList
Debug.Print item
Next
इस विधि को लागू करने का सबसे आसान तरीका आंतरिक / [_NewEnum]
Collection
पर छिपे हुए [_NewEnum]
संपत्ति पाने वाले को कॉल करके है; पहचानकर्ता को प्रमुख कोष्ठक में संलग्न करने की आवश्यकता है क्योंकि प्रमुख अंडरस्कोर जो इसे अवैध VBA पहचानकर्ता बनाता है:
Public Property Get NewEnum() As IUnknown
Attribute NewEnum.VB_Description = "Gets an enumerator that iterates through the List."
Attribute NewEnum.VB_UserMemId = -4
Attribute NewEnum.VB_MemberFlags = "40" 'would hide the member in VB6. not supported in VBA.
'Gets an enumerator that iterates through the List.
Set NewEnum = internal.[_NewEnum]
End Property