Zum Inhalt springen

VBS Auto-Aktualisierung Excel


Philipp_John

Empfohlene Beiträge

Hallo,

ich hab ein Problem bei dem ich seit langem nicht weiter komme. Ich hab schon sehr viel gesucht, gegoogelt usw. Viele der gefundenen Lösungsansätze haben auch was gebracht, aber das abschließende Problem ist immernoch da.

Mein Vorgang besteht aus 2 Scripten, 1 Batch-Script und 1 VBS-Script.

Script 1 (Batch)


start excel_aktu.vbs


echo >wait.vbs wscript.sleep (65000)

cscript wait.vbs

del wait.vbs 


xcopy Beispiel.xls "\\server\ablage\" /R /U /Y


pause

exit

Script 2 (VBS)

set excel = Createobject("Excel.Application")

excel.Visible = false

excel.Workbooks.Open "D:\Excel\Beispiel\Beispiel.xls"

WScript.Sleep (2000)

excel.ActiveWorkbook.RefreshAll

WScript.Sleep (30000)

   For Each Zelle In excel.Worksheets("Tabelle1").Range("A1:A3000")

      s = Zelle.Value

      If s <> "" And IsNumeric(s) Then

         s = s * 1

         Zelle.Value = s

      End If

   Next 

WScript.Sleep (2000)

excel.Application.DisplayAlerts = False 

excel.ActiveWorkbook.Save

excel.Application.DisplayAlerts = True 

WScript.Sleep (2000)

excel.Quit

WScript.Quit

Programmablauf:

1. Script 1 wird per geplanten Task ausgeführt, startet das vbs-Script und wartet anschl.

2. Script 2 öffnet die zu aktualisierende Exceldatei

2. - Daten werden aktualisiert;

3. - Erste Spalte wird in Zahlen umgewandelt;

4. - Exceldatei wird gespeichert und anschl. geschlossen;

5. Das wartende Script 1 kopiert abschließend die Exceldatei an den Ort, an den es vom Mitarbeiter gebraucht wird.

Nun zu meinem Problem:

Wenn ich die Batch anschmeiße läuft alles einwandfrei durch, es gibt keine Überschreibabfragen etc, nichts. Alles wunderbar. Sobald das Script aber über den Taskplaner läuft bleibt als Prozess immer Excel.exe und WScript.exe hängen. Das kuriose dabei ist, dass es manmal ohne Probleme läuft und manchmal hängen bleibt. Dann muss ich diese händisch killen, damit die Exel-Datei wieder beschreibbar ist.

Kann mir hier jemand weiterhelfen was in meinem Script falsch oder fehlerhaft programmiert ist?

Es kann ja eigentlich nur an den Wartezeiten oder am beenden der ausführenden Programme liegen. Ich finde den Fehler aber einfach nicht.

Für Hilfe wäre ich sehr dankbar.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dann baue erstmal Debug-Schritte in deine Skripte ein, um identifizieren zu können an welcher Stelle sich die Prozesse weghängen. Kannst du die Fenster bei der Ausführung durch den Taskplaner nicht sichtbar machen?

Für den Einbau einer Wartezeit kannst du unter Windows auch sleep.exe nehmen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich dachte eigentlich daran, ob mir jemand sagen kann, dass ich eventuell falsche Exel-VBA Befehle verwende.

So wie ich das über google herausgefunden habe gibt es ja scheinbar einige verschiedene Methoden zum unterdrücken von Meldungen und Speichern, etc von Exel-Mappen.

Aber danke für deinen Vorschlag mit der sleep.exe habe dadurch eine noch elegantere Lösung gefunden:

ping -n 1 -w 1000 1.2.3.4>nul

Ohne zusatzprogramm direkt in der batch ausführbar, da ping.exe am warscheinlichsten überall verfügbar ist.

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 3 Wochen später...


Script 2 :

set excel = Createobject("Excel.Application")

die Office Interop ist notorisch schlecht darin, die Prozesse aufzuräumen. Wenn du mal nach excel.Quit suchst, wirst du seehr viel finden zu "warum funktioniert das nicht". Beispiel

Ich hatte in der Vergangenheit ähnliche Probleme, (allerdings in .NET) und habe die dann auch über Marshal.FinalReleaseComObject() gelöst. Ich würd an deiner Stelle da ein kleines, .NET Progrämmchen schreiben, dem du per Command line die Parameter mitgibst, aber dann dafür auch mehr möglichkeiten hast, den Excel Prozess sauber zu töten wenn du fertig bist.

Das unterdrücken von MessageBoxen in Excel ist recht heikel. Appliacation.displayAlerts = false fängt dir nur einen Teil. Wenn du z.b. einen SQL Fehler in einer DB Abfrage hast, dann bleibt dir der Prozess da trozdem hängen.

Das kannst du eventuell mit onError GOTO abfangen, aber schön ist das nicht.

Du Fährst besser wenn du die Daten von Aussen in das Excel Sheet einfügst.

Tipp dazu : ein Range Objekt in VBA ist nichts anderes als ein 2 Dimensionales Array.

Bearbeitet von streffin
Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...