Klein0r
Erfahrenes Mitglied
Hallo,
wie der Titel schon sagt habe ich ein Problem mit diversen Excel-Instanzen. Ich öffne um die 50 Dateien und führe in jeder Datei ein Makro aus - danach wird die Datei sofort wieder geschlossen. Allerdings funktioniert die quit-Anweisung wohl nicht so richtig.
Code:
Das Thema wurde schon öfter in anderen Foren behandelt aber irgendwie gibts keine wirklich elegante Lösung für das Problem wie es mir scheint. Momentan habe ich es so gemacht:
http://www.ms-office-forum.net/forum/archive/index.php?t-156816.html
Also ich merke mir vor dem Durchlauf alle offenen Excel-Prozess-IDs und kille nachher nur die, die nicht in meiner Liste sind. Das funktioniert wohl - aber das ist ja nicht sonderlich elegant... Außerdem dauert die Ausführung ja eine weile und wenn der Benutzer zwischendurch Excel öffnen würde, würde diese PID nicht mit in der Liste stehen und mein Programm würde den Prozess gnadenlos beenden...
Falls ich nicht ins richtige Forum gepostet habe bitte ich einen Mod das Thema zu verschieben!
lg
wie der Titel schon sagt habe ich ein Problem mit diversen Excel-Instanzen. Ich öffne um die 50 Dateien und führe in jeder Datei ein Makro aus - danach wird die Datei sofort wieder geschlossen. Allerdings funktioniert die quit-Anweisung wohl nicht so richtig.
Code:
Code:
Private Function executeMakro(ByVal file As FileInfo) As Boolean
Dim oExcel As Excel.Application
Dim oBook As Excel.Workbook
Dim oBooks As Excel.Workbooks
Dim retB As Boolean = True
If file.Exists Then
Try
'Start Excel and open the workbook.
oExcel = CType(CreateObject("Excel.Application"), Excel.Application)
oExcel.Visible = False
oBooks = oExcel.Workbooks
oBook = CType(oBooks.Open(file.FullName), Excel.Workbook)
'Run the macros.
oExcel.Run("Tabelle1.CommandButton1_Click")
'Clean-up: Close the workbook and quit Excel.
oBook.Close(False)
System.Runtime.InteropServices.Marshal.ReleaseComObject(oBook)
oBook = Nothing
System.Runtime.InteropServices.Marshal.ReleaseComObject(oBooks)
oBooks = Nothing
oExcel.Quit()
System.Runtime.InteropServices.Marshal.ReleaseComObject(oExcel)
oExcel = Nothing
Catch ex As Exception
retB = False
End Try
Else
retB = False
End If
Return retB
End Function
Das Thema wurde schon öfter in anderen Foren behandelt aber irgendwie gibts keine wirklich elegante Lösung für das Problem wie es mir scheint. Momentan habe ich es so gemacht:
http://www.ms-office-forum.net/forum/archive/index.php?t-156816.html
Also ich merke mir vor dem Durchlauf alle offenen Excel-Prozess-IDs und kille nachher nur die, die nicht in meiner Liste sind. Das funktioniert wohl - aber das ist ja nicht sonderlich elegant... Außerdem dauert die Ausführung ja eine weile und wenn der Benutzer zwischendurch Excel öffnen würde, würde diese PID nicht mit in der Liste stehen und mein Programm würde den Prozess gnadenlos beenden...
Falls ich nicht ins richtige Forum gepostet habe bitte ich einen Mod das Thema zu verschieben!
lg