Excel schließt nicht

Hallo,
ich habe ein Exel-Export geschrieben.
Dieses geht auch bis auf eine „Kleinigkeit“. Excel wird nicht geschlossen. Der Prozess läuft im Hintergrund weiter.

Code:
Dim xlsApp As New Excel.Application
Dim xlsBook As New Excel.Workbook
Dim xlsSheet As New Excel.Worksheet
Dim intAttrRow As Integer
Dim intRiskRow As Integer

Set xlsBook = xlsApp.Workbooks.Open(App.Path + „\Vorlage\TemplateValuation.xlt“)
Set xlsSheet = xlsBook.Worksheets(1)

'Code der ein paar Daten rein schreibt

xlsBook.Close True
xlsApp.Quit
End Function

Ich habe so die dumme vermutung, dass das Öffnen nicht so umgesetzt wird, wie ich denke.
Wie man sieht habe ich eine Vorlage. Daraus möchte ich eine xls speicher. Das macht er auch. Ich vermute aber, dass die Vorlage noch geöffnet ist. Stimmt das? wie kann ich sie schließen?
Oder wo ist der Fehler?

Danke für eure Hilfe.
MfG
ben

Grüezi Ben

Wenn Du mit Objekt-Variablen eine Remote-Session von Excel steuerst musst Du diese vor dem Ende des Codes zerstören da sonst noch die Zeiger darauf bestehen bleiben und daher der Excel-Prozess nicht beendet werden kann und er daher im Taskmanager als ‚Leiche‘ zurück bleibt.

So müsste es IMO klappen:

Dim xlsApp As New Excel.Application
Dim xlsBook As New Excel.Workbook
Dim xlsSheet As New Excel.Worksheet
Dim intAttrRow As Integer
Dim intRiskRow As Integer

 Set xlsBook = xlsApp.Workbooks.Open(App.Path + "\Vorlage\TemplateValuation.xlt")
 Set xlsSheet = xlsBook.Worksheets(1)

 'Code der ein paar Daten rein schreibt

 xlsBook.Close True
 Set xlsSheet = Nothing
 Set xlsBook = Nothing
 xlsApp.Quit
 Set xlsApp = Nothing
 End Function


Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Danke für die Info.
Excel bleibt leider trotzdem geöffnet.
Ich habe den Code durchgeschaut. Keine Instance zeigt mehr auf irgend etwas was mit Excel zu tun hat. Der Fehler muss scheinbar wo anders liegen.
Erst wenn ich meine Applikatioin schließe wird auch Excel geschlossen.

Hast noch eine Idee? oder wer anders?

Grüezi blietzau

Excel bleibt leider trotzdem geöffnet.
Ich habe den Code durchgeschaut. Keine Instance zeigt mehr auf
irgend etwas was mit Excel zu tun hat. Der Fehler muss
scheinbar wo anders liegen.
Erst wenn ich meine Applikatioin schließe wird auch Excel
geschlossen.

Hast noch eine Idee? oder wer anders?

Ich fürchte, dass in deiner Anwendung dennoch irgend ein Verweis auf ein Excel-Objekt der betreffenden Instanz verweist.
Das ist erfahrungsgmäss immer der Grund für die Leichen im TaskManager.


Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Ich greif lediglich in zwei Methoden auf Excel zu. Bei beiden kommt der selbe Fehler.
Ich setze am Ende der Methoden alle Instanzen, die auf Excel zugreifen auf Nothing.

Methode eins:
Dim xlsApp As New Excel.Application 'Excelapplication
Dim xlsBook As New Excel.Workbook 'Arbeitsmappe
Dim xlsSheet As New Excel.Worksheet 'Arbeitsblatt

'Code wo keine neuen Referenzen entstehen

xlsBook.Close True
Set xlsSheet = Nothing
Set xlsBook = Nothing
xlsApp.Quit
Set xlsApp = Nothing

Methode 2:
Dim xlsApp As New Excel.Application 'Excelapplication
Dim xlsBook As Excel.Workbook 'Arbeitsmappe
Dim xlsSheet As Excel.Worksheet 'Arbeitsblatt
Dim xlsChart As Excel.Chart 'Diagramm
Dim rngSC As Excel.Range 'Datenbereich
Dim scNew As Excel.Series 'Datenreihe

'Code wo keine neuen Referencen entstehen

Set xlsBook = Nothing
Set xlsSheet = Nothing
Set xlsChart = Nothing
Set rngSC = Nothing
Set scNew = Nothing
xlsApp.Quit
Set xlsApp = Nothing

Ich bin mein Code nochmal durchgegangen.
Gibt es denn noch andere Ursachen, wie so ein Fehler auftreten kann?

Grüezi blietzau

Ich greif lediglich in zwei Methoden auf Excel zu. Bei beiden
kommt der selbe Fehler.
Ich setze am Ende der Methoden alle Instanzen, die auf Excel
zugreifen auf Nothing.

Gibt es denn noch andere Ursachen, wie so ein Fehler auftreten
kann?

Wichtig ist vor allem auch die Reihenfplge in der Du die Objekte zerstörst.

Wenn zuerst das Book zerstört wird, kannst Du anschliessend nicht das Sheet zerstören, da dieses zum Book gehört, das in diesem Moment nicht mehr existiert.

Ungetestet könnte dies für dich so aussehen (in meinem ersten Vorschlag hatte ich da auch noch einen Verdreher drin):

Dim xlsApp As New Excel.Application 'Excelapplication
Dim xlsBook As New Excel.Workbook 'Arbeitsmappe
Dim xlsSheet As New Excel.Worksheet 'Arbeitsblatt

'Code wo keine neuen Referenzen entstehen

 Set xlsSheet = Nothing
 xlsBook.Close True
 Set xlsBook = Nothing
 xlsApp.Quit
 Set xlsApp = Nothing




Dim xlsApp As New Excel.Application 'Excelapplication
Dim xlsBook As Excel.Workbook 'Arbeitsmappe
Dim xlsSheet As Excel.Worksheet 'Arbeitsblatt
Dim xlsChart As Excel.Chart 'Diagramm
Dim rngSC As Excel.Range 'Datenbereich
Dim scNew As Excel.Series 'Datenreihe

'Code wo keine neuen Referencen entstehen

 Set scNew = Nothing
 Set rngSC = Nothing
 Set xlsChart = Nothing
 Set xlsSheet = Nothing
 xlsBook.Close True
 Set xlsBook = Nothing
 xlsApp.Quit
 Set xlsApp = Nothing


Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Werde es testen sobald ich wieder auf der Arbeit bin. Kann aber noch eine weile dauern. bin krank geschrieben. und danach auf Schulung…
Aber schon mal danke!!