Anzeige
Archiv - Navigation
1004to1008
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
Inhaltsverzeichnis

Set = Nothing ?

Set = Nothing ?
26.08.2008 11:07:46
WolfgangN
Hallo,
ich habe ein Makro, das bei Beginn eines neuen Jahres (Eintrag Jan.) eine neue Reihe im Diagramm anlegt. Ich habe es natürlich getestet und es klappt auch. Es sind 15 Diagramme die ausgeführt werden.
Im Makro wird mit Set objChart das Diagramm gesetzt. Ich möchte jetzt gerne wissen, ob es notwendig ist den Befehl Set objChart = Nothing ausführen zulassen. Was passiert, wenn ich den Befehl weglasse?
Sollte der Befehl am Ende eines jeden Diagramms ausgeführt werden, oder reicht es den Befehl am Ende des Makros auszuführen?
Hier ein Auszug aus dem Makto. Es beginnt natürlich mit Option Explicit.
Vielen Dank
Wolfgang
'Wenn in Spalte G = Jan.
If Left(dat1, 4) = "Jan." Then
'für den Datenbereich der neuen Datenreihe,
mn = letzteG
'Gesmatkosten:
'Kontolle, ob Datenreihe des Jahres schon existiert,
Set objChart = ActiveSheet.ChartObjects("Diagramm1")
With objChart.Chart
For iReihe = 1 To .SeriesCollection.Count
'Wenn neue Datenreihe schon vorhanden dann Bol = True,
If objChart.Chart.SeriesCollection(iReihe).Name = khg Then Bol = True
Next
End With
If Bol = False Then
With objChart.Chart.SeriesCollection.NewSeries
.Name = khg
.Values = ActiveSheet.Range("P" & mn & ":P" & mn + 11)
End With
End If
Bol = False
'Gesamtkosten pro Tag:
'Kontolle, ob Datenreihe des Jahres schon existiert,
Set objChart = ActiveSheet.ChartObjects("Diagramm5")
With objChart.Chart
For iReihe = 1 To .SeriesCollection.Count
'Wenn neue Datenreihe schon vorhanden dann Bol = True,
If objChart.Chart.SeriesCollection(iReihe).Name = khg Then Bol = True
Next
End With
If Bol = False Then
With objChart.Chart.SeriesCollection.NewSeries
.Name = khg
.Values = ActiveSheet.Range("R" & mn & ":R" & mn + 11)
End With
End If
Bol = False

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Set = Nothing ?
26.08.2008 12:49:00
Ramses
Hallo
Aufgrund deines bisherigen Codes muss gesagt werden, dass VOR jedem neuen Diagramm das Object auf "Nothing" gestellt werden SOLLTE.
Sollte deswegen, weil u.U. bei der Neuinitialisierung des nächsten Diagrammes auf das "objChar" was schief gehen kann und alle weiteren Anweisungen immer noch auf das zuerst zugewiesene Object verweisen.
Aus Gründen der Programmkorrektheit sollten die Objekte am Schluss wieder zurückgesetzt werden,... allerdings verlieren die gesetzten Objecte sowieso ihre Gültigkeit,.... lediglich der Speicher wird immer noch belegt. Aber in Zeiten von 4 GB Arbeitsspeicher tut das auch nicht mehr viel zur Sache :-)
Bei Outlook habe ich festgestellt, wenn die Set-Objecte nicht zurückgesetzt werden, dass Outlook sich dann irgendwann im Speicher verirrt und ein grösserer Schleifencode nicht mehr richtig verarbeitet wird.
Daher setze ich z.B. am Ende einer Schleife die Set-Objecte grundsätzlich auf "Nothing"
Gruss Rainer
Anzeige
AW: Set = Nothing ?
26.08.2008 13:00:00
Hajo_Zi
Hallo Rainer,
ich habe aber auch schon öffters im Forum gelesen, das bei nicht nothging der Code noch im VBA Editor angezeigt wird, obwohl Datei zu.

AW: Set = Nothing ?
26.08.2008 13:40:36
WolfgangN
Vielen Dank Rainer und Hajo,
ich werde bei allen Diagrammen jeweils am Ende Set=Nothing einsetzen, also nochmals Danke.
Gruß
Wolfgang
AW: Set = Nothing ?
26.08.2008 13:37:39
Gerd
Hallo zusammen!
lediglich der Speicher wird immer noch belegt (nach Ablauf der Gültigkeit der Objektvariable?)
Mir geht es nicht um Widerspruch. Schlüssige Literatur habe ich zu diesem Aspekt nicht gefunden.
Gibt es in diesem Punkt eventuell Unterschiede, worauf sich die Objektvariable bezieht, Range, Steuerelement, Userform, Klasse?
Ich stelle die Frage mal auf offen.
Grüße Gerd
Anzeige
AW: Set = Nothing ? offen!
26.08.2008 13:47:26
Gerd
.
AW: Set = Nothing ?
26.08.2008 13:51:06
WolfgangN
Hallo Gerd,
Danke für Deine Antwort.
Ich werde jetzt sicherheitshalber für alle Set Anweisungen am Schluß Set = Nothing einbauen.
Unterschiede worauf sich die Objektvariable bezieht besteht nur im unterschiedlichen Range Bereich.
Gruß
Wolfgang
AW: Set = Nothing ?
26.08.2008 15:34:00
Gerd
Hallo,
nach langer Suche, habe ich jetzt doch noch - eine zumindest für mich - verllässliche Aussage gefunden.
Grüße Gerd
https://www.herber.de/forum/archiv/888to892/t888676.htm
Hallo Renee,
so gibt das genauso einen Fehler, denn die Methode muss ja erst mal angewendet werden, bevor sie ausgewertet werden kann. Du muss da genauso mit Set ... arbeiten.
"Und noch was, Objektvariable die nicht auf eine Klasse deuten müssen nicht zurückgesetzt werden. Denn wenn die Prozedur beendet wird, dann wird der Speicher wieder freigegeben. Nur Klassen sind
speicherresistent und müssen freigegeben werden."
Außerdem, einen Objektvariable ist ja nur ein Pointer der auf das Objekt im Stackframe zeigt. Beinhaltet also lediglich die Speicheradresse. Das ist eine Zahl vom Typ Long und benötigt damit gerade mal 4 Byte.
Gruß
Nepumuk
Anzeige
AW: Set = Nothing ?
26.08.2008 15:42:00
WolfgangN
Hallo Gerd,
wenn ich es richtig verstanden habe muß ich nun doch nicht Set=Nothing anwenden?
Naja der Aufwand Set=Nothing einzusetzen ist ja nicht groß. Ich habe dies jetzt getan, ist ja nicht falsch nur eventuell nicht erforderlich.
Danke für Dein Interesse.
Gruß
Wolfgang

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige