Jede gute Sub endet mit dem Freigeben der Objekte: Set Objekt = Nothing. Das können manchmal sehr viele sein und damit viel Schreiberei. Hier eine alternative Lösung, die auch im VBA anderer Apps funktioniert:
Sub SetObjectsToNothing(oSub As Object)
Dim oObj As Object
For Each oObj In oSub
If VarType(oObj) = vbObject Then
Set oObj = Nothing
End If
Next oObj
End Sub
Das Dingen legt man sich in seine PERSONAL.XLSB oder in ein Allg.Modul einer Mappe und spart so viel Getippse.
Viel Spaß damit! und schöne Grüße!
d'r Bastler von den VBAsteleien.de Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
Die explizite Zuweisung von Nothing an die Referenzvariable ist am Ende überhaupt nicht notwendig und führt u.U. nur zu einer Verschlechterung der Performance, denn in VBA wird beim Verlassen des Scopes, also der Sub, die Referenzvariable eh gelöscht. Mit der Zuweisung ist das dann eigentlich nur doppelt gemoppelt. Das so eine Zuweisung am Ende der Sub trotzdem gemacht wird, dient in erster Linie nur der Übersicht und besseren Lesbarkeit. Etwas anderes ist es, wenn man innerhalb des Codes eine Referenz auf Nothing setzt um zu Kennzeichnen, daß ab dieser Zuweisung die Referenzvariable ungültig ist. Das wird zum Beispiel sehr oft in Excel benötigt.
Viel wichtiger hingegen ist es, wenn man selber Ressourcen belegt hat, diese auch vor dem Ende der Sub explizit wieder freizugeben. Ein sicheres Indiz dafür ist z.B., wenn das angesprochene Objekt über eine Close/Dispose Methode oder ähnlich verfügt.
Bestes Beispiel dafür ist z.B. ein Recordset-Objekt, welches vom Code geöffnet und geschlossen werden sollte, bevor die Referenz darauf mit Nothing gelöscht wird.
Gruß
Knobbi38
Folgende Benutzer bedankten sich beim Autor knobbi38 für den Beitrag (Insgesamt 2):