Excel - Exceldatei schließen ohne speichern ... geht nicht

  • Ich verwende AutoIt 3.3.14.5 und Ms-Office Standard 2016

    Was mache ich:

    Excel starten

    $hReport = _Excel_Open(Default, Default, False, Default, True)

    Excel-Datei readonly öffnen:

    $oWorkbook = _excel_bookopen($hReport, "Exceltest.xlsx", True)

    Arbeitsblatt ___Teile____ aktiv setzen

    $oWorkbook.WorkSheets("___Teile____").Activate

    mögliche gesetzte Filter zurücksetzen

    _Excel_FilterSet($oWorkbook, Default, Default, 0)

    Filter setzen auf Spalte 6 <> blank

    _Excel_FilterSet($oWorkbook, "___Teile____", Default, 6, "<>")

    gefilterten Bereich verarbeiten, in Array schreiben usw. funktioniert alles einwandfrei 

    Excel-Datei schließen ohne speichern (funktioniert einfach nicht:(

    _Excel_BookClose($oWorkbook, False)

    Excel selber wird nicht geschlossen, da danach noch eine andere Excel-Datei geladen und verarbeitet

    wird, das funktioniert einwandfrei, ich ändere aber in der Exceldatei auch nichts.

    Excel-Datei schließen:

    Warum kommt hier trotz "False" - nicht speichern - immer die Aufforderung "Speichern: Ja/nein" von Excel?

    Das Skript pausiert natürlich an der Stelle bis das beantwortet wird.

    Danke an alle die darüber nachdenken :)

    LG

  • schließen ohne speichern?

    ProcessClose('EXCEL.EXE')

    Das Killt den Prozess, Nachteil es werden alle deine offenen EXCEL Tabellen geschlossen.

    @Edit :

    Du könntest auch das Fenster suchen Class: NUIDialog | "Speichern: Ja/nein".

    Wenn da kein Controlclick funktioniert, dann mach es mit (MouseCoordMode 2 oder CaretCoordMode 2)

    block deine Maus & Tastatur mit BlockInput ( 1 ) & nehme die Fenster Koordinaten, von Class: NUIDialog & bestätige nicht speichern mit (Mousemove & Mouseclick).

    Danach natürlich BlockInput wieder auf ( 0 ) setzen.

    3 Mal editiert, zuletzt von MojoeB (19. Mai 2021 um 18:27)

  • ProcessClose ist der Holzhammer.

    Die Excel UDF sollte das selber besser können.

    Was ist der Wert von @error und @extended nach _Excel_BookClose?

    Andere Möglichkeit: Probiere mal _Excel_Open und lasse den Parameter $bScreenupdating auf True

  • ProcessClose ist relativ brutal :| tät ich gerne vermeiden, da Excel nochmal aufmachen wieder Zeit kostet.

    >

    Was ist der Wert von @error und @extended nach _Excel_BookClose?

    <

    beides 0.

    Könnte es sein das dieses (Fehl)Verhalten darin begründet ist das ich kein xlsx sondern ein xlsm aufmache (die zweite Excel-Datei die ich aufmache ist dann wieder ein xlsx)?

    Grüsse

    LG

  • Ich habe keine Ahnung was das Makro tut. Vielleicht hängt es und das Arbeitsblatt lässt sich daher nicht schließen.

  • Was gibt dir denn _Excel_BookClose($oWorkbook, False) als Wert zurück?

    Ist @error wirklich direkt nach dem obigen Befehl 0?

    Also z.B.:

    AutoIt
    $ReturnCode = _Excel_BookClose($oWorkbook, False) 
    $error = @error
    MsgBox(1, 'ReturnCodes', 'ReturnCode: ' & $ReturnCode & '   Error: ' & $error) ; Bei Erfolg Ausgabe: ReturnCode: 1    Error: 0

    Was passiert wenn du es nicht als "readonly" öffnest, gleiches Problem?

  • >

    Könnte es sein das dieses (Fehl)Verhalten darin begründet ist das ich kein xlsx sondern ein xlsm aufmache (die zweite Excel-Datei die ich aufmache ist dann wieder ein xlsx)?

    <

    Hab ich gerade probiert. Das .xlsm als .xlsx gespeichert (brauch die Makros nicht), die Funktion _Excel_BookClose($oWorkbook, False) funktioniert wie gedacht und gewünscht.

    D.h. die Excel-Datei läßt sich ohne Probleme - ohne speichern - schließen. Es scheint als ob Excel.au3 da einen kleinen Fehler hat.

    Nein, das Makro in der Excel-Datei hat keinen Fehler, das funktioniert einwandfrei.

    Grüsse

    LG


    PS: auch der Parameter für _Excel_Open ( [$bVisible = False) funktioniert mit .xlsm nicht, genauso wie der Parameter $bScreenupdating der auch ignoriert wird.

    2 Mal editiert, zuletzt von GML (21. Mai 2021 um 10:20)