Ich hoffe, es ist nicht weiter schlimm, dass ich mal eine grundsätzliche Frage stelle ohne einen Code zu wünschen. Folgende Situation:
Wir haben eine EXCEL-Datei, die wir über eine Task nachts auf unserem Server aufrufen. Wenn die Datei gestartet wird, beginnt automatisch ein Makro. Der ganze Task-Prozess funktioniert einwandfrei, wie wir inzwischen herausfiltern konnten.
Nun das Problem: Das Makro selbst wird nicht fehlerfrei ausgeführt. Das komische daran ist, dass wir das Makro ohne Fehler ausführen können, wenn wir auf dem Server angemeldet sind und eine Verbindung zum Server an einer Workstation besteht. Sobald wir keine Verbindung über eine Workstation zum Server haben (und trotzdem einen user angemeldet haben --> hier der Admin), haben wir einen bisher noch nicht identifizierten Fehler. Das wollen wir in den nächsten Tagen mal probieren.
Deshalb meine Frage: Kennt jemand Befehle, die nur ausgeführt werden können, wenn es eine aktive Verbindung zum Server bzw. zum ausführenden System gibt? Ich denke da spontan an Applications, die mit dem Bildschirm zu tun haben, wie z.B. ScreenUpdatin=False.
Die Links habe ich an die Serverbezeichnung angepasst - war der erste Fehler, der aber schnell auffiel.
Ich habe inzwischen die einzelnen Makros ausprobiert. Bis auf ein Makro gibt es keine Probleme und ich konnte die Auswertung auch schon realisieren.
Das große Problem tritt auf, wenn ich über sendkeys und der ftp.exe passwortgeschützte Daten herunterladen möchte. Irgendwie werden die Eingabe nicht an die ftp.exe übergeben. Erst wenn man sich dann über über einen PC mit dem Server in Verbindung setzt, werden die Daten in der ftp.exe eingetragen und alles ausgeführt. Da zwischenzeitlich jedoch das Makro weitergelaufen ist, kommt es zu einem Absturz von Excel. Leider habe ich keine Ahnung, wie ich da genaueres herausfiltern kann und wie ich das beseitigen kann.
Wir haben das Herunterladen der Daten abgekoppelt und jetzt läuft unsere Auswertung - zwar nicht optimal, aber geht schon.
Sub Datei()
sLog = „D:\test.txt“
Shell „ftp -s:“ & sLog, vbNormalFocus
End Sub
in der Test.txt steht
open 10.0.0.1
test
test,121
type binary
lcd D:\
cd /pub/support/products/NAI/
prompt
mget datei.exe
quit
erklärung der Test.txt
open = ip_addresse (10.0.0.1) oder rechner_name (Server)
test = login_username
test,121 = login_passwort
type binary = stellt den dateiübertragungsmodus
lcd D:\ = wechselt das arbeitsverzeichnis auf dem lokalen rechner
cd /pub/support/products/NAI/ = wechselt zu einem anderen arbeitsverzeichnis auf dem Remoterechner.
prompt
mget datei.exe = kopiert remotedateien unter verwendung des aktuellen dateiübertragungsmodus auf einen lokalen rechner
quit = beendet die FTP-sitzung
So steht es im Grunde auch im Makro. Du meinst also, dass der Fehler nicht auftritt, wenn ich es über eine soche txt-Datei mache? Okay, kann ich auch mal versuchen. Was ist denn der Unterschied, zwischen SendKeys und einer txt-Datei als Basis?
Zu SendKeys:
Hier meinen wir grundsätzlich schon das gleiche, ich kenne für die Tastenkürzel innerhalb eines Windowsprogrammes oder auch andere Programme eben die Bezeichnung shortcut. Aber sind ja nur Bezeichnungen.
Zu meinem Code:
Hier habe ich nicht das Problem, dass es nicht funktioniert - es funktioniert nur eben nicht immer. Am liebsten wäre es uns, wenn das Makro auf unserem Server laufen würde, wenn niemand auf dem Server angemeldet ist. Es gibt drei Möglichkeiten:
Situation: Benutzer auf Server angemeldet mitTerminalsitzung
Situation: Benutzer auf Server angemeldet ohne Terminalsitzung
Situation: kein Benutzer angemeldet
Im Falle von 1 wird das Makro ohne Probleme ausgeführt.
Im Falle von 2 wird das Makro gestartet, aber nicht zu Ende ausgeführt. Öffnet man nach dem Start des Makros eine Terminalsitzung so kann man kurz nach Aufbau der Darstellung erkennen, wie Daten in die ftp.exe eingetragen werden und kurze Zeit später gibt es einen Absturz von EXCEl bzw. man bekommt das Pop-Up „Fehlerbericht senden“. Wir haben herausgefunden, dass erst ungefähr die zweite Hälfte der Befehle an das ftp.exe übergeben werden.
Im Falle von 3 funktioniert auch nichts, wir gehen aber davon aus, dass es der gleiche Fehler wie bei Situation 2 ist.