Wie man eine Verzögerung in VB-Script, lassen Sie Excel-Daten aktualisieren
Ich habe eine Excel-Datei, die lädt automatisch die Daten aus einer externen Datenbank (über eine Daten-Verbindung zu einer Access-Datenbank, die wiederum verbunden mit einer Sharepoint-Tabelle). Ich brauche, um den Prozess zu automatisieren:
- öffnen der Excel-Datei
- zu warten, für die Daten zu aktualisieren
- läuft ein makro (in dieser Datei)
- schließen der Datei
Das Skript, das ich habe, ist:
Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open("excel spreadsheet.xlsm")
WScript.Sleep 1000 * 60 * 5
objExcel.Run "macro_name"
objWorkbook.close False
objExcel.Application.Quit
Jedoch, egal welche Verzögerung ich Sie WScript.Schlaf, es aktualisiert nicht die Daten, sondern führt das makro auf die Daten, die bereits in der Tabelle. Könnte mir jemand helfen, bitte!!!
LÖSUNG
Am Ende (und mit dem Vorteil von ein paar Tagen " live-testing), die folgenden scheint die sauberste und effizienteste:
- Entfernen der "WScript.Schlafen 1000 * 60 * 5" Linie aus dem VB-Skript insgesamt
- In Excel clearing "Aktualisierung im Hintergrund Aktivieren" - Kontrollkästchen in den Eigenschaften für jede Verbindung
- Fügen Sie folgende Zeile in das makro, bevor Sie die Haupt-code
ActiveWorkbook.RefreshAll
Vielen Dank an Philip und Santosh für die Antworten unten zeigen mich in die richtige Richtung!
InformationsquelleAutor r-q | 2013-05-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
in Ihrer Arbeitsmappe, die Sie benötigen, um die Daten zu aktualisieren, die in Ihrem Abfragetabellen, bevor Sie führen Sie den code.
Warum nicht rufen Sie die Aktualisieren Methode auf die Abfragetabelle, die am Anfang Ihrer excel-vba-makro?
InformationsquelleAutor Our Man in Bananas
Für Excel-VBA Sie können verwenden Sie eine der unten, um den code angehalten.
ODER
oder
Beispiel-code
(pause für 10 Sekunden)
Application.Wait TimeSerial ...
ich fühle mich wie im 3. Schritt (•ausführen eines Makros ) tritt auf, bevor die erforderlichen Daten zur Verfügung. Nicht sehr sicher.
Stimmen zu, hinzufügen einer refresh-Linie, das makro scheint am einfachsten. Einstellung BackgroundQuery auf FALSE, sollte darauf achten, die Reihenfolge der Daten Aktualisierung der rest des Makros ausgeführt wird. Bericht tomo oder in ein paar Tagen, als die source-Datenbank-änderungen. @ Santosh: Aus meiner vergangenen Erfahrung mit Excel-Anwendung.Warten hat nicht sehr gut funktioniert mit Abfragen (zumindest Bloomberg). Kann nicht kommentieren #1 und #2 Optionen - aber vielen Dank auf jeden Fall!
Wenn Sie erstellen ein Objekt der Anwendung
Set objExcel = CreateObject("Excel.Application")
dann müssen Sie warten, wieobjExcel.Wait (Now + TimeSerial(0, 0,10))
. Versuche, & lassen Sie es uns wissen. DankInformationsquelleAutor Santosh