खोज…


वाक्य - विन्यास

  • 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


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow