none
Ausführen von Makros mit anschließendem beenden des Excel Prozesses RRS feed

  • Frage

  • Hallo zusammen,

    ich rufe via Script ein Makro auf:

     $Excel = New-Object -Comobject Excel.Application 
     $Excel.Visible = $true
    
     $Filepath = "E:\Script\test\CSV_erzeugen.xlsm"
     $Workbook = $Excel.Workbooks.Open($Filepath)
    
     $Excel.Run("CSV_erzeugen.xlsm!Modul3.ExcelLeeren")
    
     $Excel.ActiveWorkbook.Save()
     
     $Excel.Quit()

    Das funktioniert auch soweit, jedoch läuft der Excel Prozess weiter auch wenn ich die Excel Datei mit dem Script gespeichert und geschlossen habe.

    Wenn ich das Makro über Excel ausführe passiert dieses nicht, da ich dort die Exceldatei im Anschluss manuell schließe.

    Habt ihr eine Idee was ich machen kann?

    VG

    Timo

    Dienstag, 5. September 2017 08:01

Antworten

  • Danke an alle die sich das bereits durch gelesen haben und sich gedanken gemacht haben!

    Ich habe die Lösung mittlerweite gefunden:

    [System.Runtime.Interopservices.Marshal]::ReleaseComObject($Excel)
    Remove-Variable Excel

    VG

    Timo

    • Als Antwort markiert timowoehst Dienstag, 5. September 2017 08:53
    Dienstag, 5. September 2017 08:53

Alle Antworten

  • Danke an alle die sich das bereits durch gelesen haben und sich gedanken gemacht haben!

    Ich habe die Lösung mittlerweite gefunden:

    [System.Runtime.Interopservices.Marshal]::ReleaseComObject($Excel)
    Remove-Variable Excel

    VG

    Timo

    • Als Antwort markiert timowoehst Dienstag, 5. September 2017 08:53
    Dienstag, 5. September 2017 08:53
  • Theoretisch sollte Clear-Variable (wie Remove-Variable) reichen, da die Runtime die Verbindung zu COM-Objekten dann automatisch aufheben sollte und diese dann freigibt.

    ReleaseComObjekt stellt in so weit eine Gefahr dar, da die Verbindung zwangweise getrennt wird und Kopien der Variable noch Zeiger enthalten, aber nicht mehr darauf zugreifen können.

    Deine Workbook-Variable enthält nämlich noch eine Referenz auf das Workbook, dieses wiederum eine Referenz auf Excel.
    Die richtige Vorgehensweise wäre also:

    Clear-Variable Workbook
    Clear-Variable Excel

    PS:
    "$Workbook.Save" wäre der sicherere Zugriff;-).

    Dienstag, 5. September 2017 09:20