ein letztes Problem hab ich bei meinem Projekt.
Ich habe zwei Excel-Files, eine Master.xls und eine Slave.xls.
Aus der Master.xls rufe ich eine Update-Funktion für Slave.xls in Slave.xls mit Application.Run auf.
Die Update-Funktion prüft die aktuelle Version der Slave.xls und läd ggf. eine neue Version als Slave.xls_new herunter. Da sich die Slave.xls nicht selbst mit der aktuellen Version überschreiben kann muss ich nun wieder mit Application.Run eine Funktion in Master.xls starten, welche die Slave.xls schließt, die alte Version löscht, die neue Version "Renamed" und wieder öffnet.
Das sieht dann so aus in der Master.xls:
Public extWB As Workbook
Public Sub ext_close()
If Not (extWB Is Nothing) Then
extWB.Close SaveChanges:=False
Set extWB = Nothing
End If
End Sub
Public Sub ext_update()
strPathName = [Pfad] & strExtModule
If Dir(strPathName & "_new") "" Then
If Dir(strPathName) "" Then
ext_close
Kill (strPathName)
End If
FileCopy strPathName & "_new", strPathName
Kill (strPathName & "_new")
ext_start
End If
End Sub
Das Script hängt aber leider an folgendem Statement in ext_close mit "Laufzeitfehler '5' - Ungültiger Prozeduraufruf oder ungültiges Argument":
extWB.Close SaveChanges:=False
Die ext_close-Funktion wird auch beim normalen schließen der Master.xls aufgerufen und funktioniert dort problemlos. Deswegen VERMUTE ich, dass das Workbook nicht geschlossen werden kann, weil die Funktion in Slave.xls, die die Master-Funktion zum Update aufruft noch aktiv ist.
Gibt es eine Möglichkeit das Workbook oder dass externe Makro gewaltsam zu schließen?
Wenn ich nur das Objekt zerstöre wird das Workbook vermutlich noch im Hintergrund geöffnet sein, oder?
Ich würde ungern die Update-Funktion komplett in Master.xls holen, da die von einem anderen Team betreut wird und ich da nur schwer Updates einbringen kann. Deswegen versuche ich den Master.xls-teil so klein wie möglich zu halten.
Danke!
Stefan Welscher