Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Objektvariablen löschen....

Forumthread: 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
Anzeige

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
;
Anzeige

Infobox / Tutorial

Objektvariablen in Excel VBA effizient löschen


Schritt-für-Schritt-Anleitung

Um in Excel VBA Objektvariablen zu löschen, kannst du die Methode Set Objektvariable = Nothing verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Deklarieren der Objektvariable:

    Dim objWks As Worksheet
  2. Zuweisen des Arbeitsblatts:

    Set objWks = ThisWorkbook.Worksheets("Tabelle1")
  3. Verwendung der Objektvariable, z. B. um auf die Zellen zuzugreifen:

    objWks.Range("A1").Value = "Test"
  4. Löschen der Objektvariable:

    Set objWks = Nothing

Wenn du mehrere Objektvariablen hast, musst du jede einzeln mit Set ... = Nothing entladen.


Häufige Fehler und Lösungen

Fehler: Die Meldung "Objektvariable oder With-Blockvariable nicht festgelegt".

Lösung: Stelle sicher, dass du die Objektvariable korrekt zugewiesen hast, bevor du sie verwendest. Überprüfe auch, ob du die Variable mit Set ... = Nothing gelöscht hast, bevor du sie erneut verwendest.

Fehler: Speicherprobleme oder langsame Ausführung.

Lösung: Leere nicht mehr benötigte Objektvariablen mit Set ... = Nothing, um Speicher freizugeben.


Alternative Methoden

Es gibt einige alternative Methoden, um mit Objektvariablen umzugehen:

  • Verwendung von New: Wenn du ein neues Objekt erstellst, z. B. Set objForm = New UserForm1, musst du es später entladen:

    Set objForm = Nothing
  • Verwendung von Arrays: Statt viele Objektvariablen zu deklarieren, kannst du ein Array verwenden, um mehrere Objekte zu speichern und sie gleichzeitig zu leeren.


Praktische Beispiele

Hier sind einige praktische Beispiele, die dir helfen, Objektvariablen effektiv zu verwalten:

  1. Beispiel für das Löschen von Arbeitsblatt-Objekten:

    Dim objWks As Worksheet
    For Each objWks In ThisWorkbook.Worksheets
       ' Hier kannst du etwas mit dem Arbeitsblatt machen
    Next
    Set objWks = Nothing  ' Objektvariable löschen
  2. Beispiel für das Arbeiten mit UserForms:

    Dim objForm As UserForm1
    Set objForm = New UserForm1
    objForm.Show
    Set objForm = Nothing  ' UserForm löschen

Tipps für Profis

  • Verwende Debug.Print ObjPtr(objWks), um die Speicheradresse eines Objekts zu überprüfen. Das hilft dir zu verstehen, wie Excel mit Speicher umgeht.
  • Überlege, wann es notwendig ist, Objektvariablen zu löschen. In vielen Fällen geschieht dies automatisch beim Verlassen der Prozedur, besonders bei lokal deklarierten Variablen.
  • Achte darauf, dass bei der Zuweisung von New das Objekt manuell entladen werden muss, um Speicherlecks zu vermeiden.

FAQ: Häufige Fragen

1. Muss ich immer Set ... = Nothing verwenden?
Nicht immer. Lokale Objektvariablen werden automatisch gelöscht, wenn die Prozedur endet. Bei globalen oder langfristig verwendeten Variablen ist es jedoch empfehlenswert.

2. Was passiert, wenn ich eine Objektvariable nicht lösche?
Das kann zu Speicherproblemen führen, insbesondere wenn du viele Objekte erstellst. Es ist eine gute Praxis, nicht mehr benötigte Objektvariablen zu leeren.

3. Wie kann ich alle Objektvariablen auf einmal löschen?
Es gibt keine eingebaute Funktion, um alle Objektvariablen auf einmal zu löschen. Du musst jede Variable einzeln mit Set ... = Nothing löschen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige