objMyField hat den Datentyp clsDataRecField (es wird deklariert), welcher eine Klasse ist, also der "Bauplan" des Objektes. Erst wenn man die Variable mit New initialisiert, wird mit dem Bauplan das Objekt erstellt ("gebaut"). Das ist in jeder Hochsprache so.
Wichtig ist zu wissen: VB/VBA kennt nur den Default-Konstruktor, mehr gibt es nicht - keine weiteren "Spielereien" (außer die mit Interfaces) sind möglich.
Wenn man also ein Objekt in Kurzform initialisieren will, dann macht man es mit einer Funktion:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | Public Function CreateInstance(sType As String , _
sName As String , _
bNecessary As Boolean , _
vContent As Variant ) As clsDataRecField
Dim objNewField As clsDataRecField
Set objNewField = New clsDataRecField
with objNewField
.FieldType = sType
.Name = sName
.Necessary = bNecessary
.Contents = vContent
end with
Set CreateInstance = objNewField
Set objNewField = Nothing
End Function
|
PS: ByVal solltest du nur dann verwenden, wenn du an den Parametern intern etwas änderst und nicht willst das es Auswirkungen auf deren Argumente außerhalb hat. ByVal kostet dich jedesmal Geschwindigkeit, da Daten 1:1 kopiert werden (außer Objekte, darauf hat ByVal keinen Einfluss, die werden trotzdem ByRef übergeben).
In deiner Herangehensweise würden die Daten zweimal kopiert werden - 1.: Argument -> Parameter; 2.: Parameter -> Membervariable
In obigen Beispiel findet das Kopieren nur einmal statt (Parameter -> Membervariable).
Gruß
|