»New« – statische Klassenvariablen in VBA
Hinzufügen eines neuen Typs
Über IDE > Extras > Verweise kann ein Verweis auf eine Bibliothek (type library ) hinzugefügt werden. (Diese Bibliothek kann auch ein VBA-Projekt sein.)
Dadurch werden die Module (Klassen) dieser Bibliothek VBA bekannt.
(Die Reihenfolge der Verweise legt die Priorität fest, also welches Modul bei gleichnamigen Modulen verschiedener Bibliotheken verwendet wird.)
Nicht alle Bibliotheken sind immer und überall vorhanden, so wie auch bestimmte Programme nicht immer und überall vorhanden sind. Manche Bibliotheken gehören zu bestimmten Versionen von Windows oder Office, andere kommen von Drittanbietern.
Für Übungszwecke sollte jetzt Verweis auf die „Microsoft Scripting Runtime“ (scrrun.dll) hinzugefügt werden.
Statische Typdeklaration (Frühe Bindung)
Bei einer statischen Typdeklaration erhält eine Variable einen spezielleren Typ als »Object«. Diese ist aber erst nach dem Anlegen des entsprechenden Verweisen möglich.
Modul1
Option Explicit
Sub Main()
Dim V As Scripting.Dictionary
Set V = CreateObject( "Scripting.Dictionary" )
V.Add "A", "Anton"End Sub
Die Entwicklungsumgebung kann mehr Unterstützung anbieten, wenn sie den genauen Typ kennt. Beispielsweise kann sie nun nach Eingabe von »V.« (in einer neuen Zeile direkt vor »End Sub«) eine Auswahlliste anzeigen.
Vorteile
- Eingabehilfe
- Die Bibliothek kann im Objektkatalog durchsucht werden
- Es werden mehr Fehler schon bei der Eingabe oder beim Kompilieren gefunden
- das Programm läuft schneller
»New«
Das Anlegen eines Verweises erlaubt nun auch die Verwendung von »New«, das Tippfehler bei der Typangabe – im Gegensatz zu »CreateObject« – schon bei der Eingabe oder beim Kompilieren melden kann.
Modul1
Option Explicit
Sub Main()
Dim D As Scripting.Dictionary
Set D = New Scripting.Dictionary
D.Add "A", "Anton"End Sub
Modul1
Option Explicit
Sub Main()
Dim D As Scripting.Dictionary
Debug.Print VBA.Information.VarType( D )
Debug.Print VBA.Information.TypeName( D )
Debug.Print VBA.Information.IsObject( D )
Debug.Print
Set D = New Scripting.Dictionary
Debug.Print VBA.Information.VarType( D )
Debug.Print VBA.Information.TypeName( D )
Debug.Print VBA.Information.IsObject( D )
Stop
End Sub
transcript
9
Nothing
Wahr
9
Dictionary
Wahr
Der VarType ist aber weiterhin 9 (vbObject), und TypeName ist weiterhin der Typ des Objektes (nicht der Variablen)
Kurzform Early binding
Dimensionierung
Dim d As New Scripting.Dictionary
Hier wird das Objekt aber nicht beim New, sondern erst bei Bedarf angelegt, die Langform hat den Vorteil, daß der Zeitpunkt der Erzeugung ausdrücklich festgelegt wird
Beispiel JScript
Modul1
Option Explicit
'Add: Microsoft Script Control 1.0
Public Sub x()
Dim o As New ScriptControl
o.Language = "JScript"
o.AddCode "function summe(a,b) {return a+b;}"
Debug.Print o.Run("summe", 1, 2)
End Sub