Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1572to1576
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

Laufzeitfehler 438 beim Löschen von Variablen

Laufzeitfehler 438 beim Löschen von Variablen
10.08.2017 09:10:08
Variablen
Hallo Excelfreunde,
ich versuche gerade die Performance meines Codes zu verbessern und habe einen Hinweis bekommen, dass es evtl. helfen soll Variablen am Ende einer Sub zu löschen.
Also habe ich folgenden Code geschrieben (Stark vereinfacht, aber Fehler tritt auf):

Sub Diagramm_Update()
Dim MB, DB, CB As Worksheet
Set TB = ThisWorkbook.Worksheets("MAIN")
Set DB = ThisWorkbook.Worksheets("DATA")
Set CB = ThisWorkbook.Worksheets("CHARTS")
'Modify Charts
'Clear Variables
TB = Empty
DB = Empty
CB = Empty    'Hier kommt der Laufzeitfehler
End Sub
und bekomme beim Ausführen den Fehler 438 - Objekt unterstützt diese Eigenschaft oder Methode nicht.
Warum kann der Code 2 Worksheets löschen, aber versagt am dritten Worksheet?
Rainer

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: auf nothing setzen
10.08.2017 09:17:08
hary
Moin
Du musst die Variablen auf nothing setzen.
Set TB = nothing
gruss hary
AW: auf nothing setzen
10.08.2017 09:26:57
Rainer
Hallo hary,
Danke für deine Antwort.
Nochmal zur Klarstellung:
"TB = Empty" funktioniert, genauso wie "DB = Empty". Nur beim 3. Worksheet geht es nicht?
Dein Code-Vorschlag

Sub Diagramm_Update()
Dim MB, DB, CB As Worksheet
Set TB = ThisWorkbook.Worksheets("MAIN")
Set DB = ThisWorkbook.Worksheets("DATA")
Set CB = ThisWorkbook.Worksheets("CHARTS")
'Modify Charts
'Clear Variables
TB = Nothing              'Laufzeitfehler 91
DB = Nothing
CB = Nothing
End Sub
endet mit "Laufzeitfehler 91 - Objektvariable oder With-Blockvariable nicht festgelegt".
Gruß,
Rainer
Anzeige
Klar, weil nur CB als Worksheet deklariert ist!
10.08.2017 09:31:05
Sepp
Hallo Rainer,
MB und DB sind ohne Typenzuweisung und deshalb als Variant deklariert!
Gruß Sepp

AW: auf nothing setzen
10.08.2017 09:32:35
Martin
Hallo Rainer,
du musst dir deine Variablen-Deklaration mal genauer ansehen:
Dim MB, DB, CB As Worksheet
Die Variablen MB und DB hast du nicht spezifisch deklariert und gelten somit automatisch als Variant-Variablen. Aber die Variable CB hast du mit As Worksheet als Objekt-Variable deklariert.
Viele Grüße
Martin
Anzeige
AW: auf nothing setzen
10.08.2017 10:46:28
Rainer
Mein Fehler:
"Laufzeitfehler 91 - Objektvariable oder With-Blockvariable nicht festgelegt"
ensteht weil ich "MB" und "TB" vertauscht habe.
Sorry.
AW: Laufzeitfehler 438 - Worksheet = Empty
10.08.2017 10:14:22
Rainer
Hallo Sepp und Martin,
da habe ich mal wieder was gelernt.
Dim A, B, C As Long
ist nicht das gleiche wie

Dim A As Long
Dim B As Long
Dim C As Long
oder (die eigentlich gewünschte übersichtliche Variante mit allen Variablen eines Typs in einer Zeile)
Dim A As Long, B As Long, C as Long
Aber das bedeutet im Umkehrschluss, dass Worksheet-Zuweisungen auch mit Variablentyp "Variant" funktionieren? Oder gibt es da unbekannte Abgründe, die ich noch entdecken muss?
Und wie kann man eine Variable vom Typ "Worksheet" löschen?
Danke für eure Hilfe,
Rainer
Anzeige
AW: Laufzeitfehler 438 - Worksheet = Empty
10.08.2017 10:26:13
Martin
Hallo Rainer,
eine Variant-Variable ist quasi eine "Eierlegende Wollmilchsau", da kannst du alles reinpacken ;-)
Und entsprechend ist deine Annahme auch richtig, dass Worksheet-Zuweisungen auch mit Variablentyp "Variant" funktionieren?
Sieh dir mal die Variablen-Typen und ihren Eigenschaften näher an:
https://de.wikibooks.org/wiki/VBA_in_Excel/_Variablen_und_Arrays
Eine Worksheet-Variable ist eine spezifizierte Form einer Object-Variable und wird mit...
Set [Variable] = Nothing
...gelöscht.
Viele Grüße
Martin
Anzeige
AW: Laufzeitfehler 438 - Worksheet = Empty
10.08.2017 10:51:56
Rainer
Hallo Martin,
danke für deine Hilfe. Jetzt habe ich es verstanden.

Sub test()
Dim WS As Worksheet
Set WS = ThisWorkbook.Worksheets(1)
WS = Nothing     'FEHLER
End Sub
endet im Laufzeitfehler 438.

Sub test()
Dim WS As Worksheet
Set WS = ThisWorkbook.Worksheets(1)
Set WS = Nothing
End Sub
Dieser Code funktioniert. "Set WS = Empty" bringt dann Fehler 424.
Danke Nochmal!
Viele Grüße,
Rainer
Ein Variant kann auch Objekte aufnehmen und ...
10.08.2017 11:03:53
Luc:-?
…dann als solcher auch geleert wdn (Empty), Rainer;
einer ObjektVariable kann aber nur ein leeres Objekt (Nothing) zugewiesen wdn!
Merke! Empty, Null und Nothing sind ZuweisungsSonderfälle, keine echten Daten, die einen vorgesehenen, aber unbenutzten (nicht initialisierten) Zustand bezeichnen und deshalb in Pgmmier­Sprachen idR gesondert behandelt wdn müssen, zB im Vgl per Abfrage IsEmpty(Variant*), IsNull(Unbestimmtes°) bzw Objekt Is Nothing.
* auch Unbestimmtes wie Xl-LeerZellen und leere Elemente von Variant-Arrays, nicht aber LeerVariablen vom DatenTyp String [→""]
° bestimmte numerische ObjektEigenschaften im Insgesamt, wenn ihre EinzelAusprägungen unterschiedlich sind, nicht aber LeerVariablen nume­ri­scher DatenTypen [→0]

Dagegen kann man diese aber auch einfach wie Werte zuweisen bzw Objekte setzen: x = Empty, y = Null bzw Set z = Nothing
Gruß, Luc :-?
Besser informiert mit …
Anzeige
AW: Ein Variant kann auch Objekte aufnehmen und ...
13.08.2017 12:29:27
Rainer
Danke für deine Erklärung Luc.
Ich muss mich mal genauer mit den Excel Variablen beschäftigen.
Bis dahin sind nun erstmal alle Worksheet "Variant".
Gruß, Rainer
Tu das! ;-) owT
14.08.2017 23:59:46
Luc:-?
:-?

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige