Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
724to728
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
724to728
724to728
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Objektvariablen löschen....

Objektvariablen löschen....
02.02.2006 09:31:15
Matthias_FFM
Guten Morgen Excel-Forum,
gibt es die Möglichkeit über VBA alle Objektvariablen auf einen Schlag zu löschen, oder müssen alle Variablen über "Set Objektvariable = Nothing" einzeln angesprochen werden?
Danke für Eure Tipps
Matthias_FFM

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Objektvariablen löschen....
02.02.2006 10:58:21
Nepumuk
Hallo Matthias,
Eine "normale" Objektvariable benötigt 4 Byte (Datentyp Long) Arbeitsspeicher, und du kannst 512MB Speicher zum anlegen deiner Variable benutzen (egal wie viel Speicher du hast). Denn in der Variablen steht nur die Speicheradresse des Objektes, sonst nichts. Das kannst du ganz einfach testen:
Public Sub test()
    Dim objWks As Worksheet
    Debug.Print ObjPtr(Tabelle1)
    Set objWks = Tabelle1
    Debug.Print ObjPtr(objWks)
End Sub

Objektvariablen die innerhalb eines Makros dimensioniert sind, brauchst du nicht entladen. Das passiert automatisch, wenn die Prozedur beendet wird.
Objektvariablen die auf Projektebene deklariert sind kannst du entladen, musst aber nicht, da durch die Deklaration als Objektvariable der Speicherplatz auf alle Fälle vergeben wird. Egal ob was drin steht oder nicht.
Anders ist es, wenn du mit dem Schlüsselwort New eine neue Instanz eines Objektes anlegst, da musst du das Objekt entladen, weil dieses, je nach Art des Objektes, relativ viel Speicher benötigt. Dass da ein neues Objekt angelegt wird kannst du so überprüfen:
Public Sub test()
    Dim objForm As Object
    Debug.Print ObjPtr(UserForm1)
    Set objForm = UserForm1
    Debug.Print ObjPtr(objForm)
    Set objForm = New UserForm1
    Debug.Print ObjPtr(objForm)
    Set objForm = Nothing
End Sub

Das selbe gilt für Klassen, die sind speicherresitent und müssen entladen werden.
Also, zu 99% kannst du auf das entladen verzichten und beim restlichen Prozent musst du es einzeln machen.
Gruß
Nepumuk

Anzeige
umfassende Antwort, vielen Dank.... (oT)
02.02.2006 11:04:32
Matthias_FFM

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige
Archiv - Verwandte Themen
Forumthread
Beiträge