prüfen ob bestimmte Excel Datei geöffnet ist - wenn ja dann Save and Close / wenn nein im Script weiter

  • Guten Tag zusammen (und allen einen guten Start ins NEUE JAHR 2015),

    ich habe da (mal wieder ) ein Problem, mit dem ich mich schon etwas länger herumschlage und leider zu keiner Lösung gefunden habe. Daher hier meine Frage an das Forum.


    Ich muss im Rahmen einer Datenübertragung, prüfen ob ein bestimmtes Excel File (Dateiname + -pfad sind definiert) zum Übertragungszeitpunkt offen ist.
    Wenn ja, dann soll das File mit Save and Close gespeichert und geschlossen werden.
    Alle weiteren möglichen offenen Excel Files (in der Regel 1 oder 2 weitere Dateien) müssen weiter geöffnet bleiben (da laufen kontinuierlich Online-Daten auf).

    Mittels des u.a. Script Snips verusche ich das Problem in den Griff zu bekommen. Leider klappt das nicht immer.
    Soll heissen, manchmal funktioniert alles wie gewünscht - manchmal bleibt das File weiter geöffnet und wird nicht mit Save&Close beendet.
    Anmerkung - Es spielt (zumindest in meinen Tests) keine Rolle ob das File im Fokus ist (also auf dem Monitor im Vordergrund mit Fokus im File) oder nicht.


    Ich kapiere es einfach nicht - weiss jemand Rat

    [autoit]


    ;~ Check open Excel File - because open file could not be backuped... (added 21.12.2014)
    cdeXLSX1 = 'd:\Laptop\Daten\work\ABCDEF.xlsx'
    _CheckAndSave($cdeXLSX1)

    [/autoit][autoit][/autoit][autoit]

    Func _CheckAndSave($cdeXLSX1) ; Check if any Excel Instance open
    $oExcel = ObjGet('', 'Excel.Application')
    If IsObj($oExcel) Then ; check/list open Workbooks for ABCDEF.xlsx, if open save & close
    For $i = 1 To $oExcel.Workbooks.Count
    If $oExcel.Workbooks($i).FullName = $cdeXLSX1 Then
    $oExcel.Workbooks($i).Save
    $oExcel.Workbooks($i).Close
    ExitLoop
    EndIf
    Next
    EndIf EndFunc ;==>_CheckAndSave

    [/autoit]

    Danke schon mal im voraus

    mfg
    ugt100

  • Füge mal folgende Zeilen ein um zu prüfen, welcher Fehler auftritt.

    [autoit]

    #include <Debug.au3>
    _DebugSetup()
    _DebugCOMError()

    [/autoit]
  • Hallo water,

    danke für die schnelle Antwort. Anbei die Ergebnisse meiner Tests.
    Leider ist das Phänomen so in diesen Test nicht aufgetreten (zumindest nicht auf die Schnelle).
    Ich werde den Debug einfach weiterlaufen lassen, manuell drauf schauen und hoffen das sich die Konstellation wieder ergibt.

    Test 1
    kein Excel geöffnet
    Debug: @@ DEBUG COM Error encountered in cde_robobkpnew20141104_NewProgress.au3 (107) :
    Number = 0x80020006 (-2147352570)
    WinDescription = Unbekannter Name.
    Description =
    Source =
    HelpFile =
    HelpContext =
    LastDllError = 0
    Retcode = 0x00000000
    Aktion: Loop erfolgreich verlassen

    Test 2
    2 Excel Files geöffnet / Fokus auf der 2. Excel Tabelle / das zu sicherende File offen im Hintergrund
    Debug: Keine Meldungen
    Aktion: Save&Close erfolgreich

    Test 3
    2 Excel Files geöffnet / Fokus auf das zu sicherende File / der 2. Excel File offen im Hintergrund
    Debug: Keine Meldungen
    Aktion: Save&Close erfolgreich

    Test 4
    das bestimmte Excel File (exklusiv) geöffnet / Fokus nicht auf Excel File
    Debug: Keine Meldungen
    Aktion: Save&Close erfolgreich

    Test 5
    das bestimmte Excel File (exklusiv) geöffnet / Fokus auf Excel File
    Debug: Keine Meldungen
    Aktion: Save&Close erfolgreich

    Test 6
    Excel Instanz geöffnet / kein File offen
    Debug: Keine Meldungen
    Aktion: Loop erfolgreich verlassen


    melde mich (wenn es recht ist)
    Danke
    mfg
    ugt100

  • Noch 'ne Frage:
    Warum verwendest Du nicht die in AutoIt eingebaute Excel UDF? Die fängt viele Probleme bereits ab.

  • OK das kann ich natürlich sowieso mal probieren

    Ich glaube ich bin seinerzeit irgendwo im Forum auf diesen Ansatz gestossen .... das weiss ich aber nicht mehr so genau.

  • Hi Water,

    ich habe das jetzt am WE mit der Excel UDF getestet und habe es aber nicht hinbekommen.
    M.E. liegt das daran, das die Datei schon offen ist und nicht ExcelBookOpen geöffnet wurde.
    Zumindest sieht das für mich so aus.
    Ggf. weisst Du ja noch einen guten Rat ?

    Danke schon einmal im voraus

  • Hallo ugt100

    Ich hatte auch ein Excel-Problem und mir wurde gut hier geholfen.
    Der User "water" hat mir noch diesen Link gegeben, der evtl. auch für Dich wichtig sein könnte.

    Evtl. ist Dir ja nun etwas mehr geholfen.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Hi Water,

    ich habe das jetzt am WE mit der Excel UDF getestet und habe es aber nicht hinbekommen.
    M.E. liegt das daran, das die Datei schon offen ist und nicht ExcelBookOpen geöffnet wurde.
    Zumindest sieht das für mich so aus.
    Ggf. weisst Du ja noch einen guten Rat ?

    Danke schon einmal im voraus

    Auf eine bereits offene Excel-Datei (durch den User oder ein anderes Programm geöffnet) greifst Du mit _Excel_BookAttach statt _Excel_BookOpen zu.

  • Hallo Alina,
    Hallo Water,

    es ist wie so oft - vor lauter Bäume den Wald nicht gesehen.
    Kaum nutzt man den richtigen Befehl - schon funktionierts auch.

    DANKE an Euch beide - die Kuh ist vom Eis

    mfg
    ugt100


    P.S.: werde versuchen in der Zukunft die gesamten Befehle anzuschauen. Denn die Lösung war ja jetzt doch 'recht' einfach .... (wie doof von mir)

  • @ugt100
    Ging mir genauso.
    Wenn man erst einmal die richtige Hilfe bekommen hat am eigenem Problem, versteht man wie es funktioniert.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl