Hallo zusammen,
ich möchte gern eine Excel-Datei(2010 mit Macros) die auf einem Server liegt und in unregelmäßigen Abständen aktualiesiert wird, zur Ansicht auf einem lokalen Rechner starten.
Da das ausführen der Excel-Datei auf dem Server ausfällt(da sie als geöffnette Datei nicht mehr aktualiesiert werden kann) erstelle ich als erstes eine lokale Kopie.
Dann starte ich die Datei als Embedded, was auch schon funktioniert. Dann möchte ich das auf dem Button unten in der Mitte die Excel-Datei aktualiesiert wird. Hier mein bisheriges Werk(ja teilweise auch zusammenkopiert)
[autoit]#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
;~ Local $sSource = 'xxxx'; life Serverpath
Local $sSource = 'D:\Test\Test.xlsm'; test Lokal
Local $sWorkDir = 'D:\Temp'
$sWorkFile = _FileCopyToLocal($sSource, $sWorkDir); erstellen einer lokalen Kopie
Local $Obj1 = ObjGet($sWorkFile)
If Not IsObj($Obj1) Then Exit MsgBox(0, 'Abbruchfehler', 'Excel-Objekt konnte nicht erstellt werden.')
GUICreate('Embedded Excel', @DesktopWidth / 1, @DesktopHeight / 1.1, -1, -1, $WS_MINIMIZEBOX + $WS_MAXIMIZEBOX + $WS_SYSMENU + $WS_CLIPCHILDREN)
$GUI_ObjExcel = GUICtrlCreateObj($Obj1, 0, 52, @DesktopWidth - 5, @DesktopHeight - 175); die 52 steht für die Höhe der Ribbonbar
Local $btnRefresh = GUICtrlCreateButton('Neu laden', @DesktopWidth / 2 - 75, @DesktopHeight / 1.1725, 150)
; Alle Befehlsschaltflächen deaktivieren:
;~ For $Bar In $Obj1.CommandBars
;~ If $Bar.Enabled = True Then $Bar.Enabled = False
;~ If $Bar.Visible = True Then $Bar.Visible = False
;~ Next
$Obj1.Application.DisplayFormulaBar = False
$Obj1.Application.CommandBars("Shadow Settings").Visible = False
$Obj1.Application.DisplayScrollBars = True
$Obj1.Application.DisplayStatusBar = False
;~ GUISetState(@SW_SHOW)
GUISetState(@SW_MAXIMIZE)
While 1
Switch GUIGetMsg()
Case $btnRefresh
;~ MsgBox(0,'','Jetzt wird das ExelWorkbook neu geladen', 2); nur zur info
$Obj1.Close; Exceldokument schließen
$work = _FileCopyToLocal($sSource, 'D:\Temp'); aktuelles File vom Server ziehen
$Obj1 = ObjGet($work); Objekt referenzieren
If Not IsObj($Obj1) Then Exit MsgBox(0, 'Fehler', 'Excel-Objekt konnte nicht erstellt werden.')
GUISetState(@SW_SHOW)
Case $GUI_EVENT_CLOSE
$Obj1.Close
Exit
EndSwitch
GUIDelete()
WEnd
;~ #ce
Func _FileCopyToLocal($strFileFullPath, $strDirDestination)
Dim $arrString, $strFile
If FileExists($strFileFullPath) Then
$arrString = StringSplit($strFileFullPath, '\')
$strFile = $arrString[$arrString[0]]
If FileCopy($strFileFullPath, $strDirDestination & '\' & $strFile, 9) = 0 Then
SetError(0, 1)
Else
Return $strDirDestination & '\' & $strFile
EndIf
EndIf
EndFunc;==>_FileCopyToLocal
So jetzt zu meinen Problemen:
- das aktualiesieren funzt noch garnicht
- was noch schlimmer ist, das Objekt scheint nicht richtig geschlossen zu werden. Beim ersten Start geht es noch, danach benötigt es ewig zum Starten, und beim runterfahren des Rechners bekomme ich hinweismaldungen das es noch geöffnette Excel-Dateien gibt.
Ich gebe bald auf.