Hallo zusammen,
in meinem Skript soll Excel geöffnet werden (welches auf einem Netzlaufwerk liegt) und dort etwas eingetragen, gespeichert und geschlossen werden.
Soweit alles super. Um Fehlerquellen auszuschließen habe ich nun eine Funktion eingebaut, die prüft, ob diese Excel Datei bereits geöffnet ist / in Benutzung ist (von einer anderen Person) und demnach mein Skript zu warten hat, bis der Zugriff wieder klappt.
Hier mal ein Schnipsel, wie der Zugriff auf die Datei problemlos funktioniert:
#include <Excel.au3>
Local $oExcelapp = _Excel_Open(True,False,True,True,True)
Local $oExcel = _Excel_BookOpen($oExcelapp, "C:\Users\751076\Desktop\MAF.xlsx", False, True, "123")
Sleep(3000)
_Excel_BookClose($oExcel, True)
_Excel_Close($oExcelapp, Default, True)
Er öffnet Excel, lädt die Arbeitsmappe, wartet 3 Sekunden und schliesst anschliessend wieder alles. Genau soll es sein - hier gibts auch nichts zu meckern.
Nun zum Problem. Baue ich hier vorher die Abfrage ein, ob die Datei derzeit verwendet wird und demnach zu warten hat, funktioniert zwar noch das öffnen von Excel, aber das Laden der Arbeitmappe vollzieht er nichtmehr... allerdings wirft er auch keinen Fehler aus - er tut es einfach nur nicht.
So der modifizierte Code mit Access-Prüfung:
#include <Excel.au3>
#include <WinAPI.au3>
$sFile="C:\Users\751076\Desktop\MAF.xlsx"
Do
$hFile = _WinAPI_CreateFile($sFile, 2)
$file_open_test = _WinAPI_GetLastErrorMessage()
ConsoleWrite($file_open_test & @CRLF)
Sleep(250)
Until $file_open_test = "The operation completed successfully."
Local $oExcelapp = _Excel_Open(True,False,True,True,True)
Local $oExcel = _Excel_BookOpen($oExcelapp, "C:\Users\751076\Desktop\MAF.xlsx", False, True, "123")
Sleep(3000)
_Excel_BookClose($oExcel, True)
_Excel_Close($oExcelapp, Default, True)
Alles anzeigen
Warum um Himmels Willen tut er das? Ich kann nicht nachvollziehen warum er das "_Excel_BookOpen" komplett ignoriert, obwohl es im obigen Beispiel noch wunderbar funktioniert...
Jemand ne Idee?
LG
Mirko