none
Excel Makro mit Task Scheduler via bat/vbs starten RRS feed

  • Allgemeine Diskussion

  • Hallo Forum,
    ich habe eine Excel Datei deren Berechnung die mittels Task Scheduler automatisch ausgelöst werden soll.

    Dazu habe ich eine vbs Datei geschrieben:
    Dim objExcel
    Set objExcel = CreateObject("Excel.Application")
    objExcel.Visible = true
    objExcel.Workbooks.Open("\\(Server\Pfad\Grunddatei.xlsm")
    objExcel.run("Grunddatei.xlsm!Makro_Berechnen")
    objExcel.ActiveWindow.close
    objExcel.quit
    Set objExcel = Nothing

    Wenn ich dieses Script direkt auslöse wird die Excel Datei geöffnet und die Berechnung entsprechend ausgeführt. Wenn ich die Berechnung im Scheduler einplane wird leider Excel nur als Hintergrundprozess geöffnet. Die Datei und Berechnung werden nicht geöffnet/ausgelöst. Deshalb - so habe ich mir ergoogelt - könne man noch eine Batch Datei verwenden, welche dann das Script auslöst. Auch das habe ich probiert:

    @echo off
    wscript \\serverpfad\script.vbs

    Wieder funktioniert die Kette wenn ich das Batch File direkt auslöse. Nur wenn ich den Task einplane besteht auch in diesem Fall das Problem, dass Excel zwar gestartet wird aber nicht die Datei geöffnet/Berechnung gestartet.

    Unser Server Admin konnte keinen Berechtigungsfehler oder fehlerhafte Einstellungen feststellen. Daher meine Frage an die Experten hier im Forum - wo könnte ich noch Änderungen vornehmen?

    Danke für Eure Unterstützung!
    Liebe Grüße
    ZitroLimo
    Donnerstag, 24. August 2017 07:15

Alle Antworten

  • Per Grundsatz ist Excel (laut Doku) nicht im Batch automatisierbar.
    Manchmal klappt es halt doch.
    Wichtig ist, dass Excel im Hintergrund ja nicht sichtbar ist und deshalb "objExcel.Visible = false" anzusetzen ist.
    Falls dann auch noch Fehler auftreten, sollte ebenso "objExcel.DisplayAlerts = False" gesetzt sein.

    Desweiteren gibst du einen UNC-Pfad für die Datei an. Im Batch kann sich jedoch niemand am Server anmelden, so dass die Datei nicht im Zugriff ist. Automatische Anmeldungen werden im Batch nicht durchgeführt.

    Prüfe also, ob du die Datei nicht in einen lokalen Pfad legen kannst und ob all Ressourcen des Excel-Makros lokal erreichbar sind. Ist dies nicht der Fall, musst du ggf. per "net use"-Befehlen bzw. API's die Netzwerkressourcen mit User/Password zuweisen. Wobei "net use" für "unbeaufsichtigte Ausführung" noch zugelassen werden muss.

    Donnerstag, 24. August 2017 07:28
  • Hallo bfuerchau,
    Danke für Deine Antwort!

    Folgende weitere Problemlösungsversuche sind gescheitert:
    - Workbook_Open Befehl in der Grunddatei - Excel läuft nur als Hintergrundprozess
    - objExcel.Visible = false und objExcel.DisplayAlerts = False in der vbs Datei setzen - Excel läuft nur als Hintergrundprozess
    - Alle Dateien lokal auf dem Server ablegen (kein UCN Pfad) und dann einplanen - Excel läuft nur als Hintergrundprozess

    - Unsere Admins haben die Berechtigungen geprüft und net use Befehle für unbeaufsichtigte Ausführung sind zugelassen. Ich könne mich mit den Berechtigungen in meinem Konto frei zwischen den Servern bewegen (globale Admin Gruppe).

    - Skript auf VB.NET umstellen - bin ich dran. Da muss ich noch etwas lesen/spielen.

    - Neuer vbs code:

    Set objExcel = CreateObject("Excel.Application")

    With objExcel

         .Workbooks.Open("\\(servername)\applicationpool\testdata\Grunddatei.xlsm")

         .Visible = true

         .WindowState = &HFFFFEFD7 'Vollbild

        

    '*** Aktiviert den Screen **********************************************************

         Set myExl=CreateObject("WScript.Shell") 'Starte Scripting Shell

         myExl.appactivate "Grunddatei" 'Aktiviere das Fenster mit dem Namen "Grunddatei"

         set myExl = nothing 'Scripting Shell aus dem Speicher löschen

    '***********************************************************************************

         .Run("Grunddatei.xlsm!Makro_Berechnen")

         With .ActiveWorkbook

              .Save

              .Close(0)

         End With

         .Quit

    End With

    Set objExcel = Nothing

    Folgenden Vorschlag müsste ich noch prüfen: Ausführen des Makros als SYSTEM statt User.

    Ich habe jetzt erstmal zwei Tage frei aber aktualisiere den Beitrag schnellstmöglich um weitere (ggf. gescheiterte) Lösungsversuche. Für weitere Ideen bin ich sehr dankbar!

    Liebe Grüße
    ZitroLimo


    Donnerstag, 24. August 2017 09:02
  • Hallo Forum,

    aktuell versuche ich einen Managed Service Account zu bekommen um so die Nutzerberechtigungen (wie von bfuerchau vorgeschlagen) als Fehlerquelle ausschließen zu können. 

    Liebe Grüße

    ZitroLimo

    Montag, 4. September 2017 08:39
  • Wenn du Excel als Batchprozess bedienst, dann lass den Quatsch mit der Sichtbarmachung der Excel-Anwendung. Excel ist im Batch per se unsichtbar und alles tun diesbezüglich ist und bleibt wirkungslos.

    Ein weiteres Problem ist mit Sicherheit die Macro-Sicherheit, die für den ausführenden User entsprechend eingestellt sein muss. Für den Account SYSTEM ist das leider nicht möglich da es für diesen keine Dialoganmeldung gibt.

    Die Frage, die ich mir stelle ist eher, was denn dein VBA-Macro durchführen soll, was du nicht auch mit VBS erledigen kannst. Schließlich kann VBS da genausoviel und der Zugriff auf Excel-Daten klappt ebenso.
    Damit umgehst du zumindest das Thema Macrosicherheit.

    Und soweit ich weiß, kann man VBS mit Visualstudio debuggen.
    Alternativ gibt es da ein VBSEdit mit integriertem Debugger.

    Ein Umschreiben in .NET löst dein generelles Problem nicht.

    Montag, 4. September 2017 10:07
  • Hi bfuerchau,

    ich habe jetzt diesen Managed Service Account und kann somit auch endlich ohne aktiven Login Tasks einplanen.

    Die Makrosicherheit habe ich dem Account über die Trusted Verzeichnisse in Excel selbst zugewiesen.

    Die Kollegen haben mich dazu gedrängt den VBS/Batch ganz wegfallen zu lassen und das mit Workbook open direkt in Excel zu starten. Allerdings beendet Application.quit den Excel Modus nicht richtig...lange Rede kurzer Sinn - wir nutzen jetzt einen Workaround da ich das Unternehmen verlasse und sich sonst keiner kümmern möchte. Trotzdem DANKE :)

    Donnerstag, 21. September 2017 11:41