CreateObject('Word.Application') wie freigeben?

Hallo,

ich habe folgendes Problem:
Ich lege in einem Word-Makro mit CreateObject(„Word.Application“) zwei Objekte an. Es funktioniert auch alles tadellos.
Allerdings bleiben im Task-Manager dann zwei WINWORD.EXE-Prozess hängen.
Muss ich die Objekte explizit wieder freigeben?

Wo ist der Fehler?

Vielen Dank schon mal vorab
Grüßle
Ben

Grüezi Ben

Ich lege in einem Word-Makro mit
CreateObject(„Word.Application“) zwei Objekte an. Es
funktioniert auch alles tadellos.
Allerdings bleiben im Task-Manager dann zwei
WINWORD.EXE-Prozess hängen.
Muss ich die Objekte explizit wieder freigeben?

Aber ja doch, wie sollen sie denn auch sonst den Speicher freigeben können.

Setze in umgekehrter Reihenfolge ihrere Erstellung alle Instanzen auf ‚= Nothing‘ schliesse das Dokument und beende Word.
Setze dann auch dein Word-Objekt auf ‚= Nothing‘

Wo ist der Fehler?

Da wir deinen Code nicht kennen können wir nur auf das Fehlende Vernichten der Objekt-Instanzen schliessen.


Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Hallo Thomas

mit diesem Snippet läßt sich das Problem erzeugen:

Sub Test()
Dim wdDOT As Object
Dim wdDOC As Object

Set wdDOT = CreateObject(„Word.Application“)
Set wdDOC = CreateObject(„Word.Application“)

Set wdDOC = Nothing
Set wdDOT = Nothing
End Sub

Es bleiben trotz Freigabe die beiden Prozesse hängen.

Grüße
Ben

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Grüezi Ben

mit diesem Snippet läßt sich das Problem erzeugen:

Sub Test()
Dim wdDOT As Object
Dim wdDOC As Object

Set wdDOT = CreateObject(„Word.Application“)
Set wdDOC = CreateObject(„Word.Application“)

Set wdDOC = Nothing
Set wdDOT = Nothing
End Sub

Es bleiben trotz Freigabe die beiden Prozesse hängen.

Ja, klar - Word wird im Hintergrund geöffnet und bleibt es auch, solange Du es nicht schliesst.
Lies bitte genau(er) was ich geschrieben hatte:

Setze in umgekehrter Reihenfolge ihrere Erstellung alle
Instanzen auf ‚= Nothing‘ schliesse das Dokument und beende
Word.
Setze dann auch dein Word-Objekt auf ‚= Nothing‘

Hier eine angepasste Version, die klappt - gehe sie mit F8 Schritt für Schritt durch:

Sub Test()
Dim wdDOT As Object
 Set wdDOT = CreateObject("Word.Application")
 wdDOT.Visible = True
 wdDOT.Quit
 Set wdDOT = Nothing
End Sub


Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Grüezi Thomas, Ben

Muss ich die Objekte explizit wieder freigeben?

Aber ja doch, wie sollen sie denn auch sonst den Speicher
freigeben können.

Setze in umgekehrter Reihenfolge ihrere Erstellung alle
Instanzen auf ‚= Nothing‘ schliesse das Dokument und beende
Word.

@Thomas, muß umgekehrte Reihenfolge sein?

mit diesem Snippet läßt sich das Problem erzeugen:

Sub Test()
Dim wdDOT As Object
Dim wdDOC As Object

Set wdDOT = CreateObject(„Word.Application“)
Set wdDOC = CreateObject(„Word.Application“)

Set wdDOC = Nothing
Set wdDOT = Nothing
End Sub

Es bleiben trotz Freigabe die beiden Prozesse hängen.

@Ben Du startest Word zweimal, ob du wdDoc auf Nothing setzt oder dies tust:
Set wdDOT = CreateObject(„Powerpoint.Application“)
interessiert die beiden Word-Instanzen Null.

„Quit“ bezogen auf eine Anwendung entspricht dem was du mit Freigabe bezeichnest.

Gruß
Reinhard

Grüezi Reinhard

Setze in umgekehrter Reihenfolge ihrere Erstellung alle
Instanzen auf ‚= Nothing‘ schliesse das Dokument und beende
Word.

@Thomas, muß umgekehrte Reihenfolge sein?

Ja, in aller Regel halte ich es so, da die später erstellen Objekte sich meist auf zuvor instanzierte beziehen.

Ein Objekt das von einem anderen instanziert wird, kann nicht zerstört werden, resp. genau dann bleibt die Leiche im Taskmanager zurück.


Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -