VBA => Attribute
Có thể bạn quan tâm
Syntax
- Attribut VB_Name = "ClassOrModuleName"
- Attribut VB_GlobalNameSpace = False 'wird ignoriert
- Attribut VB_Creatable = False 'Ignoriert
- Attribut VB_PredeclaredId = {True | Falsch}
- Attribut VB_Exposed = {True | Falsch}
- Attribut variableName.VB_VarUserMemId = 0 'Null bedeutet, dass dies das Standardmitglied der Klasse ist.
- Attribut variableName.VB_VarDescription = "some string" 'Fügt den Text zu den Objektbrowserinformationen für diese Variable hinzu.
- Attribut procName.VB_Description = "some string" 'Fügt den Text der Object Browser-Information für die Prozedur hinzu.
- Attribut procName.VB_UserMemId = {0 | -4}
- '0: Macht die Funktion zum Standardmitglied der Klasse.
- '-4: Gibt an, dass die Funktion einen Enumerator zurückgibt.
VB_Name
VB_Name gibt den Klassen- oder Modulnamen an.
Attribute VB_Name = "Class1"Eine neue Instanz dieser Klasse würde mit erstellt
Dim myClass As Class1 myClass = new Class1VB_GlobalNameSpace
In VBA wird dieses Attribut ignoriert. Es wurde nicht von VB6 übertragen.
In VB6 wird eine globale Standardinstanz der Klasse erstellt (eine "Verknüpfung"), sodass auf Klassenmitglieder ohne Verwendung des Klassennamens zugegriffen werden kann. Beispielsweise ist DateTime (wie in DateTime.Now ) tatsächlich Teil der VBA.Conversion Klasse.
Debug.Print VBA.Conversion.DateTime.Now Debug.Print DateTime.NowVB_Createable
Dieses Attribut wird ignoriert. Es wurde nicht von VB6 übertragen.
In VB6 wurde es in Verbindung mit dem Attribut VB_Exposed , um die Zugänglichkeit von Klassen außerhalb des aktuellen Projekts zu steuern.
VB_Exposed=True VB_Creatable=TrueDies würde zu einer Public Class , auf die von anderen Projekten aus zugegriffen werden kann. Diese Funktionalität ist jedoch in VBA nicht vorhanden.
VB_PredeclaredId
Erstellt eine globale Standardinstanz einer Klasse. Auf die Standardinstanz wird über den Namen der Klasse zugegriffen.
Erklärung
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 FunctionAnruf
Debug.Print Class1.GiveMeATwoIn gewisser Weise simuliert dies das Verhalten statischer Klassen in anderen Sprachen. Im Gegensatz zu anderen Sprachen können Sie jedoch immer noch eine Instanz der Klasse erstellen.
Dim cls As Class1 Set cls = New Class1 Debug.Print cls.GiveMeATwoVB_Exposed
Steuert die Instanzierungsmerkmale einer Klasse.
Attribute VB_Exposed = FalseMacht die Klasse Private . Es kann nicht außerhalb des aktuellen Projekts zugegriffen werden.
Attribute VB_Exposed = TrueMacht die Klasse Public außerhalb des Projekts verfügbar. Da VB_Createable jedoch in VBA ignoriert wird, können Instanzen der Klasse nicht direkt erstellt werden. Dies entspricht einer folgenden VB.Net-Klasse.
Public Class Foo Friend Sub New() End Sub End ClassUm eine Instanz von außerhalb des Projekts zu erhalten, müssen Sie eine Fabrik zum Erstellen von Instanzen verfügbar machen. Eine Möglichkeit hierzu ist ein reguläres Public Modul.
Public Function CreateFoo() As Foo CreateFoo = New Foo End FunctionDa öffentliche Module von anderen Projekten aus zugänglich sind, können wir neue Instanzen unserer Public - Not Createable Klassen Public - Not Createable .
VB_Beschreibung
Fügt einer Klasse oder einem Modulmitglied eine Textbeschreibung hinzu, die im Objekt-Explorer sichtbar wird. Idealerweise sollten alle öffentlichen Mitglieder einer öffentlichen Schnittstelle / API eine Beschreibung haben.
Public Function GiveMeATwo() As Integer Attribute GiveMeATwo.VB_Description = "Returns a two!" GiveMeATwo = 2 End Property
Hinweis: Alle Accessor-Mitglieder einer Eigenschaft ( Get , Let , Set ) verwenden dieselbe Beschreibung.
VB_ [Var] UserMemId
VB_VarUserMemId (für VB_VarUserMemId ) und VB_UserMemId (für Prozeduren) werden in VBA hauptsächlich für zwei VB_UserMemId verwendet.
Angeben des Standardmitglieds einer Klasse
Eine List , die eine Collection kapseln würde, würde eine Item Eigenschaft haben, sodass der Clientcode Folgendes tun kann:
For i = 1 To myList.Count 'VBA Collection Objects are 1-based Debug.Print myList.Item(i) NextVB_UserMemId ein VB_UserMemId Attribut für die Item Eigenschaft auf 0 gesetzt ist, kann der Clientcode VB_UserMemId tun:
For i = 1 To myList.Count 'VBA Collection Objects are 1-based Debug.Print myList(i) NextNur ein Member kann in einer bestimmten Klasse legal VB_UserMemId = 0 haben. Geben Sie für Eigenschaften das Attribut im Get Accessor an:
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 PropertyEine Klasse mit einem For Each Schleifenkonstrukt iterierbar machen
Mit dem magischen Wert -4 teilt das VB_UserMemId Attribut VBA mit, dass dieses Member einen Enumerator liefert - was dem Client-Code VB_UserMemId ermöglicht:
Dim item As Variant For Each item In myList Debug.Print item NextDie einfachste Methode zum Implementieren dieser Methode ist das Aufrufen des hidden- [_NewEnum] Eigenschafts für eine interne / gekapselte Collection . Der Bezeichner muss in eckige Klammern eingeschlossen werden, da der führende Unterstrich ihn zu einem unzulässigen VBA-Bezeichner macht:
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 Lizenziert unter CC BY-SA 3.0 Nicht angeschlossen an Stack OverflowTừ khóa » Visual Basic Attribute Vb_name
-
VB Attributes: What Are They And Why Should We Use Them?
-
What Does The Attribute Keyword Do In VB6? - Stack Overflow
-
Attributes - Visual Basic | Microsoft Docs
-
Attributes Property (Visual Basic For Applications) | Microsoft Docs
-
VBA Attributes - RIP Tutorial
-
VBA Tutorial => VB_Name
-
Thread: MVB Syntax Error On Attribute VB_name - VBForums
-
Attributes - VBA Tutorial - SO Documentation
-
What Does The Attribute Keyword Do In Vb6
-
Attributes. The High-end In VBA. – Useful Code - VBA
-
Component Attributes - Programming Visual Basic .NET [Book]
-
VBA: Is There A Way To Getread The Module Attributes - Anycodings
-
Form1