Führe ich folgendes stark vereinfachtes Programm aus, bleibt der Excel-Prozess anschließend aktiv, d.h. er wird weiterhin im Taskmanager angezeigt:
Dim oExcel As Object Dim oBook As Object
Set oExcel = CreateObject("Excel.Application") Set oBook = oExcel.Workbooks.Open(App.Path & "\Exceltest.xlsx") oBook.Worksheets(1).Cells(1, 1) = "Exceltest" oBook.Save oExcel.quit
Kurz zum Ablauf: Das Programm öffnet eine vorhandene Excel-Datei, schreibt in die 1. Zelle einen Text, speichert die Änderung und beendet dann Excel und sich selbst. Eigentlich ganz einfach. Dieses Problem scheinen (nach fleißigem Googlen) viele zu haben, ohne dass ich eine funktionierende Antwort gefunden habe. Für einen hilfreichen Tip bedanke ich mich im Voraus.
Inzwischen habe ich festgestellt, dass obiger Code bis Excel 2003 einschließlich wie gewünscht funktioniert, nur ab Excel 2007 tritt der genannte Effekt auf. Noch ein Hinweis: Ich muss Excel aus Access heraus starten, so dass mir die Möglichkeiten von NET leider nicht zur Verfügung stehen.
Ich hatte das Problem auch und habe damals lange erfolglos nach den Gründen für das Excel-Verhalten gesucht. Habe es dann so gelöst, dass ich bei Beenden meines Programms (also bei mir im FormClose) auch die Excel-Applikation beendet habe. Die Excel-Applikation hatte ich mir nämlich bei Starten gemerkt.
private Microsoft.Office.Interop.Excel.Application m_oExcelApplication; public bool StartExcel() { if ( m_oExcelApplication == null ) { try { m_oExcelApplication = new Microsoft.Office.Interop.Excel.Application(); m_oExcelApplication.Visible = IsDebugVersion; // es ist super, wenn man Excel beim Debuggen sehen kann! m_oExcelApplication.WorkbookBeforeClose += new Microsoft.Office.Interop.Excel.AppEvents_WorkbookBeforeCloseEventHandler ( ExcelWorkbookBeforeClose ); // brauchst du für dein Problem nicht unbedingt } catch ( Exception) { return false; } return true; }
Danke für deinen Beitrag, aber ich muss das Problem per VBA in Access lösen. Das Closen aller Workbooks brachte keinen Erfolg. Übrigens funktioniert mein Code bis Excel 2003 einschließlich, ab Excel 2007 nicht mehr.
Danke für deinen Beitrag, aber ich muss das Problem per VBA in Access lösen. Das Closen aller Workbooks brachte keinen Erfolg. Übrigens funktioniert mein Code bis Excel 2003 einschließlich, ab Excel 2007 nicht mehr.
Die zentrale Zeile ist "m_oExcel-Application.Quit". Also ich beende auch die Excel-Applkation, achdem ich alle Workbooks geschlossen habe. Wenn ich die Workbooks nicht vorher schließe, kommen Nachfragen, ob ich die Änderungen speichern will. Das verhindere ich mit dem Schließen der Workbooks mit dem Parameter "Änderungen nicht speichern". Ich habe einfach meinen c#-Code kopiert. Du kannst ihn ohne Probleme in VBA übertragen. Das ist sehr ähnlich.
Bekanntes Problem! Habe auch ständig Excel Prozesse als Speicherleichen vorliegen.
In den meisten Fällen sind es noch Referenzen auf die COM Objekte. In deinem Fall oExcel und oBook. Versuche mal die am Ende auf Nothing oder in C# null zuzuweisen. Wir haben uns in C# folgenden Aufräumer geschrieben :
Danke für deinen Beitrag, aber ich muss das Problem per VBA in Access lösen. Das Closen aller Workbooks brachte keinen Erfolg. Übrigens funktioniert mein Code bis Excel 2003 einschließlich, ab Excel 2007 nicht mehr.