2017-04-14 1 views
1

J'ai écrit du code VBA qui utilise le jeu d'enregistrements ADODB pour extraire des données d'une feuille de calcul Excel afin de renseigner un formulaire utilisateur. La feuille de calcul est remplacée par de nouvelles données chaque fois que le code est exécuté.Le jeu d'enregistrements ADO renvoie les anciennes données (obsolètes)

Depuis quelques semaines, j'ai commencé à avoir un problème où l'objet jeu d'enregistrements ne renvoie pas les données correctes, mais renvoie à la place les données qui ont été utilisées dans une session précédente. Cela arrive même après la fermeture du fichier Excel et sa réouverture. Par exemple, je vais exécuter le code avec l'ensemble de données A, puis fermer le fichier Excel. Je rouvre le fichier Excel, remplace la feuille de calcul par l'ensemble de données B et exécute le code. Au lieu de renvoyer l'ensemble de données B, il retourne l'ensemble de données A. Lorsque cela se produit, j'ai confirmé que la feuille de calcul contient en fait l'ensemble de données B et non pas A. Pour plus d'informations générales, je crois que cela a commencé. la chaîne de connexion ACE au lieu de JET. J'ai été forcé de faire cette transition parce que j'ai commencé à obtenir des erreurs avec la chaîne de connexion JET. La chaîne de connexion que j'ai utilisée peut être trouvée ci-dessous.

J'apprécierais toute sorte de commentaires liés à ce problème. Si plus d'informations sont nécessaires, s'il vous plaît faites le moi savoir.

strConnString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & mstrFile & ";Extended Properties=""Excel 12.0 Macro;HDR=YES;IMEX=1""" 
+0

Quelques questions. Premièrement, d'où vient ce code VBA? Je suppose que ce n'est pas dans le même fichier Excel qui contient les données, auquel cas cela n'a pas vraiment d'importance. Si le code VBA est _is_ dans un autre fichier/application, l'Excel contenant vos données n'a pas besoin d'être ouvert pour que le code fonctionne. Deuxièmement, vous dites que vous rouvrez Excel, changez les données et exécutez le code encore une fois - avant de relancer le code, sauvegardez-vous l'Excel modifié? – Skippy

+0

Le code VBA réside dans le fichier Excel macro-activé, tout comme les données (dans une feuille de calcul). Le fichier Excel n'est pas enregistré avant de réexécuter le code. –

+0

Code VBA et les données dans le * même * fichier Excel? Alors pourquoi avez-vous besoin d'une chaîne de connexion? Mais si vous utilisez une chaîne de connexion, alors ne pas enregistrer le fichier peut être responsable de votre problème. Pendant que vous modifiez le fichier, votre chaîne de connexion pointe vers la copie non enregistrée originale du fichier. Enregistrez le fichier avant d'exécuter le code et voyez si cela fonctionne. – Skippy

Répondre

0

Ce problème a été résolu (merci à Skippy). L'enregistrement du fichier après l'importation des nouvelles données dans la feuille de calcul a résolu le problème. Sans enregistrer le fichier, la connexion pointait vers une version du fichier contenant des données périmées.