Thema Datum  Von Nutzer Rating
Antwort
06.09.2013 09:52:59 Andy Petsch
NotSolved
06.09.2013 10:58:12 Gast37993
NotSolved
06.09.2013 11:06:30 Andy Petsch
NotSolved
Blau eigenen Konstruktor erstellen
06.09.2013 11:40:40 Gast78062
*****
Solved
06.09.2013 12:16:11 Andy Petsch
NotSolved
06.09.2013 13:50:01 Gast44225
NotSolved

Ansicht des Beitrags:
Von:
Gast78062
Datum:
06.09.2013 11:40:40
Views:
1041
Rating: Antwort:
 Nein
Thema:
eigenen Konstruktor erstellen

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:

' in einem Modul, d.h. nicht im Klassenmodul!
Public Function CreateInstance(sType As String, _
                               sName As String, _
                               bNecessary As Boolean, _
                               vContent As Variant) As clsDataRecField
     
    Dim objNewField As clsDataRecField '... As New clsDataRecField  'gewöhn dir das gar nicht erst an

    Set objNewField = New clsDataRecField
    with objNewField 
         .FieldType = sType         ' erfordert eine entspr. 'Property Let FieldType' in der Klasse 'clsDataRecField'
         .Name = sName              ' ...  
         .Necessary = bNecessary    ' ...
         .Contents = vContent       ' ...
    end with
     
    Set CreateInstance = objNewField ' Objektvariablen immer mit Set zuweisen!

    Set objNewField = Nothing  ' geschieht idR. autom. nach Verlassen, es ist jedoch nie verkehrt selbst 'aktiv' daran zu denken
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ß


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
06.09.2013 09:52:59 Andy Petsch
NotSolved
06.09.2013 10:58:12 Gast37993
NotSolved
06.09.2013 11:06:30 Andy Petsch
NotSolved
Blau eigenen Konstruktor erstellen
06.09.2013 11:40:40 Gast78062
*****
Solved
06.09.2013 12:16:11 Andy Petsch
NotSolved
06.09.2013 13:50:01 Gast44225
NotSolved