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
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
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
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!!