Comment définir un retard dans le Script VB pour laisser Excel mise à jour des données
J'ai un fichier Excel qui se charge automatiquement les données à partir d'une base de données externe (via une Connexion de Données à un Accès de base de données qui est, à son tour, liée à une table Sharepoint). J'ai besoin d'automatiser le processus d':
- de l'ouverture du fichier Excel
- d'attente pour les données à actualiser
- l'exécution d'une macro (dans ce fichier)
- de la fermeture du fichier
Le script que j'ai, c'est:
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
Cependant, n'importe quel retard j'ai mis en WScript.le sommeil, il ne met pas à jour les données; au lieu de cela, il exécute la macro sur les données déjà dans la feuille de calcul. Quelqu'un pourrait-il aider, s'il vous plaît!
SOLUTION
À la fin (et avec le bénéfice de quelques jours de " live test), la suite semble être le plus propre et le plus efficace:
- Retrait de la "WScript.Le sommeil 1000 * 60 * 5" la ligne de la VB script complètement
- Dans Excel, de compensation "Activer l'Actualisation en arrière-plan" case à cocher dans les Propriétés de chaque connexion
- Ajoutant la ligne suivante à la macro avant le code principal
ActiveWorkbook.RefreshAll
Un grand merci à Philippe et Santosh pour les réponses ci-dessous me pointer dans la bonne direction!
OriginalL'auteur r-q | 2013-05-23
Vous devez vous connecter pour publier un commentaire.
dans votre classeur, vous devez actualiser les données dans vos tables de requête avant de l'exécuter, vous code.
Pourquoi ne pas appeler le Actualiser méthode sur la table de requête, au début de votre excel macro vba?
OriginalL'auteur Our Man in Bananas
Pour Excel-VBA, vous pouvez utiliser l'un des ci-dessous pour mettre en pause le code.
OU
ou
exemple de code
(pause de 10 secondes)
Application.Wait TimeSerial ...
j'ai envie de la 3ème étape (•exécution d'une macro ) se produit avant que les données requises sont disponibles. Pas très sûr.
d'accord, l'ajout d'une actualisation de la ligne de la macro semble plus facile. Réglage BackgroundQuery FALSE doit prendre soin de la commande de mise à jour des données / le reste de la macro en cours d'exécution. Fera rapport tomo ou dans quelques jours, comme la source de modifications de base de données. @ Santosh: à Partir de mon expérience passée avec Excel, Application.Attendre ne fonctionne pas très bien avec les requêtes (au moins ceux de Bloomberg). Ne peux pas commenter sur les #1 et #2 options - mais merci en tout cas!
Lorsque vous créez l'objet de la demande
Set objExcel = CreateObject("Excel.Application")
vous devez alors appliquer attendre queobjExcel.Wait (Now + TimeSerial(0, 0,10))
. N'essayez & laissez-nous savoir. MerciOriginalL'auteur Santosh