Excel speichern und richtig beenden

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von JB_.

    Excel speichern und richtig beenden

    Hallo Ihr,
    das Thema gabs schon des Öfteren aber ich habe keinen Eintrag gefunden in dem es schlussendlich gelöst wurde.
    zb Hier: Excel-Anwendung wird geöffnet. Wie kann man sie wieder schließen?

    Das Problem ist folgendes:
    Nach starten, öffnen und bearbeiten einer Excel-Datei kann diese nicht geschlossen werden und in einem nächsten Schritt auch nicht gespeichert werde, da sie vom PC als geöffnet betrachtet wird.
    Die Frage ist, welche Variablen müssen beendet oder auf "Nothing" gesetzt werden, damit das Excel ordnungsgemäß und auch bei Prozesse im Taskmanager geschlossen wird?

    Das ist der Code den ich zum zählen der Excel-Einträge nutze verwende und nachdem das Problem unter anderem auftritt:

    Quellcode

    1. Dim objExcel As Object
    2. Dim objBook As Object
    3. Dim zaehler As Integer
    4. zaehler = 0
    5. objExcel = CreateObject("Excel.Application")
    6. objBook = objExcel.Workbooks.Open("Pfad")
    7. Do While objExcel.Range("A" & zaehler + 1).Value <> ""
    8. zaehler = zaehler + 1
    9. Loop
    10. MsgBox("Es befinden sich " & zaehler & " Einträge in der Liste")
    11. objBook.Close
    12. objExcel.Quit
    13. 'objBook.Close
    14. objExcel = Nothing


    Im Taskmanager bleibt der Prozess leider immer geöffnet.
    Über eure Hilfe würde ich mich sehr freuen.

    Vielen Dank im voraus!
    Jakob :)

    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    In dem Fall wäre es einfacher, schneller und performanter, wenn du über Nuget das Paket EPPlus implementierst.
    Vor allem hast du dort das Problem mit den Excel-Leichen nicht.

    Im Projekt: Nuget-Pakete verwalten, nach epplus suchen, installieren, anwenden.
    Die Anzahl der Zeilen bekommst du mit

    VB.NET-Quellcode

    1. ​Using xlPackage = New ExcelPackage(New FileInfo("C:\example.xlsx"))
    2. Dim RowCount = xlPackage.Workbook.Worksheets(1).Dimension.End.Row
    3. End Using

    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „petaod“ ()

    Ohne Anführungszeichen kommt "Z wurde nicht definiert" und da das öffnen auch mit Anführungszeichen ohne Probleme klappt nehme ich mal an, dass das so sein muss.
    Vielen Dank für den Tipp mit dem zählen lassen :)
    Aber leider ist das Hauptproblem das speichern und schließen der Datei.
    Meistens kommt beim befehl .save oder .close ""Der öffentliche Member ActivWorkbook für den Typ ApplicationClass wurde nicht gefunden." oder ""Die Save-Methode des Application-Objektes konnte nicht ausgeführt werden."

    JB_ schrieb:

    ber leider ist das Hauptproblem das speichern und schließen der Datei.
    Das ist überhaupt kein Problem.
    Wirf das ganze Excel-Geraffel weg und verwende NUR meinen Code.
    Du brauchst kein Excel-Objekt, wenn du mit EPPlus arbeitest.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Hallo Ihr, vielen Dank nochmals für die Antworten.

    Für die Nachwelt:
    Bei meiner ursprüngliche Vorgehensweise konnte ich das Problem durch:

    Quellcode

    1. objExcel.ActiveWorkbook.Close(SaveChanges:=0)
    2. objExcel.Quit
    3. objExcel = Nothing

    beheben.

    Ich weiß nicht wie das geht, aber dieser Beitrag kann als erledigt markiert werden.
    Lg :)