Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1240to1244
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

Ist "Erase DataArr" = "Set DataArr = Nothing" ?

Ist "Erase DataArr" = "Set DataArr = Nothing" ?
Martin
Hallo,
ich habe bislang zum Löschen eines Arrays stets "Erase" verwendet. Da ich "Erase" aber im Anfang einer Schleife verwende und das Array zu Beginn leer ist, kommt es beim ersten Schleifendurchlauf zu einer Fehlermeldung. Nun habe ich "Erase DataArr" durch "Set DataArr = Nothing" ersetzt und es klappt alles. Sind diese beiden Methoden zum Löschen eines Arrays identisch (...außer dass bei "Erase" das Array existieren muss)? Oder gibt es eine bessere Lösung?
Viele Grüße
Martin

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
Erase löscht INHALTE, Set löscht das Object
23.12.2011 10:31:09
NoNet
Hallo Martin,
m.E. werden mit ERASE die INHALTE eines ARRAYs gelöscht, die Variable bleibt weiterhin erhalten - mit SET obj=NOTHING wird das Objekt an sich "zerstört".
Austauschbar sind diese Anweisungen nicht, da ein ARRAY keine Objektvariable darstellt und m.E. daher nicht mit Set obj=Nothing "gelöscht" werden kann...
Den Teil mit dem "leeren Array" habe ich nicht verstanden : wurde die Variable zu vor mit DIM DataArr() als ARRAY deklariert ?
Gruß, NoNet
AW: Erase löscht INHALTE, Set löscht das Object
23.12.2011 14:47:39
Martin
Hallo NoNet,
vielen Dank für deine Antwort. Vor der Schleife wird das Array mit Dim DataArr As Variant direkt am Makroanfang deklariert. Unter SET obj=NOTHING schreibe ich noch ReDim DataArr(1 To 13). Folgendes Makro ist zwar sinnlos, soll aber meiner Frage verdeutlichen:
Option Explicit
Sub Test()
Dim i As Long, DataArr As Variant
For i = 1 To 10
'Erase DataArr          'führt beim ersten Schleifendurchlauf zum Fehler
Set DataArr = Nothing   'klappt
ReDim DataArr(1 To 3)
Debug.Print "Wert1: " & DataArr(1)
Debug.Print "Wert2: " & DataArr(2)
Debug.Print "Wert3: " & DataArr(3)
DataArr(1) = "Test"
DataArr(2) = "Versuch"
DataArr(3) = "Probe"
Next i
End Sub
Jetzt habe ich aber beim Herumprobieren gerade herausgefunden, dass Erase nicht funktioniert, weil das Array vor der Schleife nicht mit ReDim DataArr(1 To 3) dimensioniert wurde. Trotzdem verstehe ich den Unterschied zwischen SET obj=NOTHING und ReDim DataArr(1 To 13) noch nicht richtig.
Viele Grüße
Martin
Anzeige
AW: Erase löscht INHALTE, Set löscht das Object
23.12.2011 18:25:02
Luschi
Hallo Martin,
zum Zeitpunkt des Eintritts in die For-Schleife weiß Vba noch nicht, daß DataArr mal ein verkapptes
Datenfeld werden soll, eine saubere Instanzierung der Variablen sieht so aus:

Sub Test()
Dim i As Long, DataArr() As Variant
For i = 1 To 10
Erase DataArr          'jetzt klappt Erase
Set DataArr = Nothing  'führt nun beim ersten Schleifendurchlauf zum Fehler
ReDim DataArr(1 To 3)
Debug.Print "Wert1: " & DataArr(1)
Debug.Print "Wert2: " & DataArr(2)
Debug.Print "Wert3: " & DataArr(3)
DataArr(1) = "Test"
DataArr(2) = "Versuch"
DataArr(3) = "Probe"
Erase DataArr
Next i
End Sub
Es ist eben leider üblich geworden, erst mal alles als Variant zu definieren und
später per Redim umzudefinieren. Und so steht es auch in der Excel-2003 Hilfe:

Die ReDim-Anweisung dient normalerweise zum Festlegen oder Ändern der Größe eines
dynamischen Datenfeldes, das bereits formal mit einer Private-, Public- oder Dim- _
Anweisung
und einem leeren Klammernpaar (ohne Indizes für die Dimensionen) deklariert wurde.
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Erase löscht INHALTE, Set löscht das Object
24.12.2011 00:36:07
Martin
Hallo Luschi,
vielen Dank für deine Antwort. Also lag mein Problem nur an dem nicht gesetzten leeren Klammerpaar. Nun habe ich wieder etwas dazugelernt, vielen lieben Dank!
Viele Grüße (...und ein frohes Weihnachtsfest)
Martin

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige