Laufzeitfehler nach Umst.auf Office 2019
04.03.2020 11:41:15
Gode
wir bereiten im Unternehmen gerade die Umstellung von Office 2010 auf Office 2019 vor.
Die Umstellung wurde bisher lediglich bei wenigen ausgesuchten Test-Usern vorgenommen.
Jetzt zu meinem Problem:
Wir erstellen direkt aus dem ERP-System programmgesteuert Excel-Dateien.
Häufig werden diese Daten dann in darauf basierenden Controlling-Auswertungen weiterverarbeitet (i.d.R. indem sich Makros in diesen anderen Dateien diese Daten holen).
Hier kann es zwei Szenarien geben:
Im ersten Fall ist die aus dem ERP-System erstellte Excel-Datei (Datenquelle) bereits erstellt und an einem definierten, bekannten Speicherort abgelegt worden -> UNPROBLEMATISCH
Im anderen Fall erfolgt die Weiterverarbeitung der Daten im gleichen Atemzug.
D.h. die ERP-Excel-Datei wurde erstellt, die Datei ist noch offen und eine andere Datei übernimmt hieraus Daten.
Um dies korrekt zu handlen wird im Makro über eine Funktion geprüft, ob die Datei der Excel-Datenquelle bereits geöffnet ist.
Entsprechend dem Rückgabewert der Funktion DateiGeoeffnet erfolgt die Initialisierung des Workbook-Objektes
If DateiGeoeffnet(strPfad) = False Then
Set wbOpen = Workbooks.Open(strPfad)
Else
Set wbOpen = Workbooks(strDatei)
End If
Das hat bei mir bis zur Umstellung der Office-Version auf 2019 auch immer hervorragend geklappt.
Jetzt bekomme ich bei der Makro-Verarbeitung immer einen Laufzeitfehler beim Initialisieren des (bereits geöffneten) WB-Objekts.
Ich habe dann festgestellt, dass das übers ERP erstellte Excel seit der Umstellung auf 2019 in einer neuen Excel-Instanz erstellt wird (ist bei Office 2010 nicht so! habe ich nochmal an einem anderen Rechner getestet).
Das Problem ist also das Initialisieren über Set wbOpen = Workbooks(strDatei), da diese Excel-Instanz die geöffnete Arbeitsmappe nicht kennt (denke ich zumindest ?!)
Ich hätte mir eigentlich gedacht, dass Die Funktion DateiGeoeffnet in diesem Fall den Rückgabewert False zurückliefert aber scheinbar wird hierüber das auch in einer anderen Instanz geöffnete Excel dennoch als geöffnet erkannt:
Private Function DateiGeoeffnet(DerPfad As String) As Boolean
On Error Resume Next
Open DerPfad For Binary Access Read Lock Read As #1
Close #1
If Err.Number 0 Then
DateiGeoeffnet = True
Err.Clear
End If
End Function
Meine Frage ist nun:
Wie könnte das Makro angepasst werden, so dass auch eine in einer anderen Instanz geöffnete Excel-Mappe initialisiert und angesprochen werden kann?
Gleichzeitig muss aber auch weiter die Verarbeitung unter Office 2010 gewährleistet bleiben! (zumindest so lange, bis die Umstellung komplett vollzogen ist).
Vielen Dank im Voraus für eure Hilfe hierzu !!
Gode