Schließen von ChartData-Workbook in VB.Net - Ausnahme von HRESULT: 0x800A03EC

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Schließen von ChartData-Workbook in VB.Net - Ausnahme von HRESULT: 0x800A03EC

    Hallo an alle!

    Ich hoffe euch geht es allen gut und ihr seid alle fit und sicher!

    Mein Problem ist folgendes:
    Ich habe einen Code, der bis vor einpaar Tagen noch problemlos durchlief.
    --> Nun allerdings hängt sich der Code immer an einer Zeile auf.
    Das Merkwürdige: Eine Kollegin hat den aktuellen Release einfach problemlos durchlaufen lassen können....bei mir geht das nicht....und ich hab es geschrieben :D

    Was soll der Code überhaupt machen?
    Es soll eine Powerpoint Template geöffnet werden und diese befüllt werden. Dieser Schnipsel hier arbeitet eine recht statische Folie ab. Hier sollen nur die Werte eines Diagramms ausgetauscht werden.
    Dabei werden die Daten durch "ChartData" in einem Excel-Workbook geöffnet und bearbeitet. Ich möchte, dass dieses Excel-Workbook nach der Bearbeitung wieder geschlossen wird und nicht offen bleibt.
    --> Wie gesagt, das hat so auch gut funktioniert. Nun Hängt es sich beim schließen des Workbooks auf.

    Folgend der relevante Ausschnitt aus meinem Code (vereinfacht):

    VB.NET-Quellcode

    1. 'Vorbereitung der PowerPoint und Excel-Elemente

    VB.NET-Quellcode

    1. Dim slide = pp.Slides(1)
    2. Dim shape = slide.Shapes
    3. slide = pp.Slides(5)
    4. shape = slide.Shapes
    5. Dim workbook As Excel.Workbook
    6. Dim worksheet As Excel.Worksheet
    7. Dim chart As PowerPoint.Chart
    8. 'Zugriff auf die Daten des relevanten Diagramms
    9. chart = shape.Item("Diagramm 13").Chart
    10. chart.ChartData.Activate()
    11. workbook = CType(chart.ChartData.Workbook, Excel.Workbook)
    12. worksheet = CType(workbook.Sheets(1), Excel.Worksheet)
    13. worksheet.UsedRange.ClearContents()
    14. 'Hier würde das Sheet nun einfach beschrieben werden, was auch im richtigen Code passiert und funktioniert mit worksheet.Range().Value usw. usw.
    15. chart.Refresh()
    16. chart = Nothing
    17. workbook.Close() '<--- Hier entsteht der Fehler: System.Runtime.InteropServices.COMException: Ausnahme von HRESULT: 0x800A03EC


    Wissenswertes:
    Die Kollegin hat die Excel und Powerpoint Version 2019. Ich habe die 2016er Version.

    Ich brauche dringend Hilfe....ich habe schon viel zu viel Zeit mit erfolgslosen Tests und Suchen verbracht...
    Danke schonmal an alle, die in die Konversation steigen!

    LG, Alex
    Googelt man nach der Fehlermeldung, so gibt es unzählige Einträge im Zusammenhang mit Excel, aber immer bezogen auf anderen Stellen beim Ansprechen von Excel. Daraus lese ich, dass die Fehlermeldung wohl allgemein auf die fehlgeschlagene Kommunikation mit Excel eingeht, nicht aber explizit mit dem Close zu tun hat.

    Ein kleiner Schuss ins Blaue: Hast du mal versucht, das chart = Nothing nach dem Close zu machen?
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum

    alexokulov schrieb:

    ich möchte, dass dieses Excel-Workbook nach der Bearbeitung wieder geschlossen wird und nicht offen bleibt.
    Sollen die Modifikationen im Workbook gespeichert werden?
    Dann mach erst Workbook.Save und dann Workbook.Close(False)
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

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

    Danke für die Antworten!
    @Marcus - Leider hat das schonmal nicht geklappt...danke für den Vorschlag!

    @petaod - Leider hat auch das nicht geklappt - stattdessen ist es diesmal sogar schon beim workbook.Save() hängen geblieben. Die Fehlermeldung ist genau die gleiche...


    Liegt es vielleicht doch irgendwie am speichern? Aber warum kann meine Kollegin das Programm ausführen und ich aber nicht?
    -> Oft waren die Lösungen zu dieser Fehlermeldung (leider stets in etwas anderem Kontext) im Netz sehr sehr simpel. Ich finde aber einfach nicht die Lösung.
    Kann es sein, dass jegliche Ansprache von workbook an der Stelle auf einen Fehler läuft? Dann wird das wohl in deinem vorherigen Code irgendwie "kaputt" gemacht.

    Was ist, wenn du z. B. MessageBox.Show(workbook.FullName) machst, gibt das eine Ausgabe oder auch einen Fehler?
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Dann habe ich nur noch einen einzigen Vorschlag, den ich beim Googlen gefunden habe:

    workbook.Close(0)

    Die Close-Methode hat 3 Parameter, die aber eigentlich optional sein sollen. Dennoch las ich hier und da, dass das Setzen des 1. Parameters diverse Fehler beheben könnte. Es bedeutet, dass Änderungen nicht gespeichert werden sollen (false).
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Hallo @Marcus Gräfe,
    das hat leider auch nicht geklappt.
    Sehr Merkwürdig und auch sehr frustrierend, dass das nicht klappt. Vorallem, weil es ja ein so einfacher Befehl zu sein scheint.

    Hier sage ich "workbook", dass er auf das geöffnete ChartData verweist, während "worksheet" dann durch workbook auf den sheet verweist

    VB.NET-Quellcode

    1. ​ chart.ChartData.Activate()
    2. workbook = CType(chart.ChartData.Workbook, Excel.Workbook)
    3. worksheet = CType(workbook.Sheets(1), Excel.Worksheet)


    Direkt im Anschluss kann ich das Sheet und das Workbook auf befüllen durch solche Befehle:

    VB.NET-Quellcode

    1. ​worksheet.Cells(1, 1).Value = "Werte und Text"


    Es scheitert nur daran das Blatt wieder zu schließen.
    Um das nochmal zu erwähnen:
    Die Zeile "workbook.close()" hat in dieser Form bis vor kurzem noch geklappt.
    Außerdem kann eine Kollegin einen Release ausführen, welcher bei mir mit der selben Meldung stoppt.

    Kann es also auch an meiner Excel-Version liegen, der plötzlich etwas fehlt?

    Danke für die bisherige Hilfe. Schade, wenn wir das nicht lösen können.
    Falls du das Problem mit Excel nicht sauber gelöst bekommst, kannst du auch EpPlus verwenden.
    Du hast den Vorteil, dass du nicht abhängig bist von irgendeiner Office-Version (Office wird da gar nicht verwendet).
    Der Nachteil ist, dass du zusätzlich zur EXE eine DLL im Verzeichnis hast.
    Das würde mich nicht stören, aber manchen gefällt das nicht, wenn nicht alles in einer EXE ist.
    Dafür wirst du das ganze Interop-Geraffel los (zumindest den Excel-Teil).

    Und du musst die Excel-Zugriffe natürlich etwas anders programmieren, aber das ist sehr nahe an Excel angelehnt, insbesondere wenn du nur Zellinhalte manipulieren willst.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --