1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

Speichern einer Excel-Datei mittels Batch-Datei

Discussion in 'Programmieren' started by grabschmayr, Feb 7, 2008.

Thread Status:
Not open for further replies.
  1. Hallo.

    Habe wieder mal ein Problem und hoffe, ihr könnt mir weiter helfen.

    ich möchte mittels einer batch-datei ein Excel-File öffnen, speichern und schließen.
    Grund: Das Excel-File aktualisiert sich beim Öffnen, sodass ich aktuelle Werte darin habe.

    Öffnen und schließen hab ich schon mittels "googlen" heraus gefunden, wie man das macht. Nur wie speichere ich vor dem Schließen???

    mfg max

    Zur Info: Windows 2000 Professional, falls das relevant ist.
     
  2. Urs2

    Urs2 Megabyte

    Eine Batch kann nicht in Excel hinein wirken.

    - Ein Blatt öffnen ist OK.

    - Speichern muss Excel selbst, zum Beispiel mit einem Automakro.
    Diesen Code eingeben im VB-Editor in DieseArbeitsmappe
    Code:
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
        
        If Me.Saved = False Then Me.Save
    
    End Sub
    Beim Schliessbefehl speichert jetzt Excel zuerst die Datei und schliesst erst dann.
    Allerdings nur beim regulären Schliessen; beim Killen oder Abwürgen kann das Makro wohl nichts mehr machen.

    Wie willst Du Excel mit der Batch schliessen?

    Ohne Batch wäre es einfacher und genau so schnell > Einen Link zum Tabellenblatt ins Startmenü, und dann halt von Hand mit Klick aufs Kreuz schliessen, mit dem Makro wird automatisch gespeichert.

    Gruss Urs

    PS > mein Code ist für Excel 2003.
    In der VB-Hilfe schauen ob der Sub-Name für 2000 gleich ist.
     
  3. Vorerst mal danke für die rasche Antwort.

    nur zur Info: Verwende e Excel 2003.

    Es sieht folgendermaßen aus:

    das ganze soll auf meinem Rechner an meinem Arbeitsplatz ablaufen, da dieser immer läuft.

    Das Excel soll sich in der Nacht ( damit es keinen stöhrt) öffnen, speichern und wieder schließen. Somit wird die Excel datei automatisch mit neuer Werten befüllt.
    Ich hätte mal den Ansatz mit einer Batch-Datei gehabt, aber anscheinend ist das vielleicht doch keine gute Lösung, da man ja nur killen bzw. abwürgen kann.

    Gibt es denn noch andere Lösungen? Möchte eigentlich vermeiden, jeden Tag das Excel-File von Hand schließen zu müssen.
     
  4. Urs2

    Urs2 Megabyte

    Das Arbeitsblatt wirst Du wohl nachts mit den "Geplanten Tasks" öffnen lassen?

    Mit dem oben erwähnten Before_Close Makro und einem zusätzlichen Automakro (am gleichen Ort abgespeichert) sollte sich das machen lassen. Es muss so aussehen >

    Code:
    Private Sub Workbook_Open()
            
            'hier kommen die Befehle hinein, 
            'die beim Start automatisch abgearbeitet werden sollen
            
    End Sub
    
    - Es muss entweder eine bestimmte Zeit abgewartet werden, in der die Daten sicher (mit einer vernünftigen Zeitreserve) aktualisiert worden sind.
    - Oder das Makro vergleicht das Update-Datum in einer bestimmten Zelle (sofern eine solche vorhanden ist) mit dem aktuellen Datum. Wenn zum Beispiel um 02.00 Uhr das Datum identisch ist, dann ist OK.
    >>> anschliessend wird Excel regulär geschlossen (mit Speichern).

    Prüfe welche Methode die wenigsten Fehlermöglichkeiten verspricht...

    Gruss Urs
     
  5. Urs2

    Urs2 Megabyte

    Korrektur > Vergiss was ich geschrieben hatte...

    Eine Batch kann es nicht... und Excel selbst nur mit viel Mühen. Excel-Makros wollen immer arbeiten und keine Pause machen (keine Gewerkschaft!). Und da die Tabelle beim normalen Oeffnen wohl nicht sofort wieder geschlossen werden sollte, müsste eine später gestartete Hilfs.XLS diesen Befehl ausführen...

    VisualBasicScript kann das bei mir erledigen. Mein XP benutzt den gleichen WSHost wie Win2000.

    Uebernimm den Code in einen Editor, passe alles an und speichere die Datei als xyz.VBS

    Code:
    Set objExcel = CreateObject("Excel.Application")
    Set objWorkbook = objExcel.Workbooks.Open("C:\PfadDeinerDatei\Tabelle.xls")
    objExcel.Visible = True
    
    	'erzwingt die Aktualisierung der externen Daten
    	'ohne dumme Rückfrage
    objWorkbook.RefreshAll
    
    	'legt den Script schlafen, bis aktualisiert ist > Anpassen!
    	'in Tausendstel-Sekunden, hier also 30 Sekunden
    wscript.sleep 30000
    
    	'speichert die XLS
    objWorkbook.save
    		
    	'vorsichtshalber nochmals kurzes Abwarten des Speicherns
    wscript.sleep 10000
    
    	'schliesst Excel
    objExcel.Quit
    

    Sichere zuerst die Originaltabelle, dann > Doppelclick auf die xyz.VBS
    Jetzt prüfen, ob die Dauer der Pause für das Update reicht.

    Wenn OK, dann die xyz.VBS von den Geplanten Tasks nachts starten lassen.

    Gruss Urs
     
  6. danke, danke, danke,...

    habs schon ausprobiert und es funktioniert einwandfrei,...

    echt super, dass du mir geholfen hast,...

    mfg max
     
  7. Urs2

    Urs2 Megabyte

    Bitteschön! Ich hatte mir ja auch viel Mühe gegeben - für Dich.

    Aber ehrlicher >
    Ich hatte schon ähnlich gelagerte Probleme in Excel, und sie dann mit obskuren Klimmzügen umschifft. Jetzt wollte ich einmal wissen, ob sich diese Zugriffe auch vernünftig ausführen lassen.

    Für mich, als kleines Licht in VBScript, war es etwas mühsam und ausufernd - "Schulung" inbegriffen. Immerhin weiss ich jetzt, wie man von aussen viele Excel-VBA-Befehle innerhalb Excel ausführen lassen kann.

    Die Bestätigung, dass das auch auf einem anderen PC problemlos funktioniert, freut mich.

    Gruss Urs
     
Thread Status:
Not open for further replies.

Share This Page