Connexion ADODB à partir de VBA cessé de fonctionner
Nous avons un Exccel feuille de calcul utilisée pour gérer la rote pour la nuit, les ingénieurs du support technique. A tout à l'arrière, j'ai ajouté un peu de code VBA qui redirige automatiquement les numéros de téléphone du support à l'ingénieur de téléphone en dehors des heures d'ouverture.
Il le fait en se connectant à une base de données gérée par les fournisseurs de services de téléphonie, et de mettre à jour le renvoi numéro.
Cet après-midi, il est tout à coup ne fonctionne pas sur le serveur central:
Dim Db As ADODB.Connection
Sub ConnectDatabase()
Set Db = New ADODB.Connection
Db.Open "SupportMobileDb"
End Sub
Le code s'arrête à la New ADODB.Connection
ligne, et des rapports:
Run-time error '430':
Class does not support Automation or does not support expected
interface
Je peux toujours lancer la macro sur mon ordinateur portable, et cela fonctionne correctement. Et sur le serveur central, je peux encore utiliser Excel, et de se connecter à la source de données correctement. Il juste ne fonctionnera pas par VBA plus sur ce serveur.
La macro couru correctement à 9h et détourné tous les téléphones de bureau, mais la 5pm détourner pour le personnel de la macro ne fonctionne pas. Je ne peux pas voir que Windows a été mis à jour aujourd'hui, ou de toute autre modification.
Quelqu'un a vu ce problème avant?
OriginalL'auteur asc99c | 2011-10-07
Vous devez vous connecter pour publier un commentaire.
OK trouvé le problème. Ressemble à un certain point, l'une des références externes pour le VBA des trucs a décoché (jeu d'enregistrements ADO 2.8). J'ai rajouté la référence et il semble fonctionner OK maintenant.
Depuis que je l'ai en quelque sorte eu 3 upvotes pour répondre à ma propre question (!), Je ferais mieux de mettre un peu plus en détail dans le cas où d'autres personnes que vous rencontrez ce problème:
Dans Visual Basic editor, sous Outils -> Références, j'ai eu
Microsoft ActiveX Data Objects 2.8 Library
sélectionné. MaisMicrosoft ActiveX Data Objects Recordset 2.8 Library
a été désactivée. Fait intéressant, cette bibliothèque n'apparaît pas comme une option lorsque l'on regarde sous Windows 7, mais les macros travailler sans elle.Une note plus puisque de toute évidence beaucoup de gens ont ce problème... Ma réponse ci-dessus ont permis de résoudre le problème, mais seulement jusqu'à ce que certaines personnes de modifier le fichier à nouveau, à quel point, la version d'Office automatiquement re-crée le problème, et j'ai dû me résoudre à nouveau.
Il y a deux solutions à plus long terme:
1) Vous pouvez utiliser la liaison tardive, et de se débarrasser de la bibliothèque référencée entièrement. Voir http://support.microsoft.com/kb/245115 pour plus de détails sur cette.
2) Pour mes fins, j'ai déplacé les macros dans un autre classeur entièrement ces macros ne doit être exécuté à partir du serveur central de toute façon (les gens l'affichage de la liste de ne pas avoir la source de données ODBC, en sorte que les macros ne fonctionnent pas de toute façon). Alors maintenant, la première étape du VBA dans le classeur de macro n'est pour ouvrir la liste classeur, et il exécute ensuite le reste du code VBA inchangé.
OriginalL'auteur asc99c
Je fais beaucoup de VBA travail et sont venus à travers cette beaucoup ces derniers temps. Je vais écrire un programme et il fonctionnera très bien pour une longue période (par ans dans certains cas) et puis un jour, des ordinateurs commencer à obtenir cette erreur.
Les plus évidentes des choses pour un développeur, c'est que ADODB.Connexion et/ou ADODB.Jeu d'enregistrements arrêter de s'auto-exploiter eux-mêmes. Soit ADODB est minuscule ou la deuxième partie est. Parfois, cependant, la capiltization est fine et il arrive encore.
Séparant la création de la connexion et/ou de l'objet recordset à partir du "Jeu de la nouvelle partie" modification du code a fixé à chaque fois pour moi.
Plus précisément, le code suivant tweaks ont toujours fixée pour moi:
Changer la création de tous les objets de connexion à partir de:
:
De même, changer la la création de tous les objets recordset à partir de:
:
OriginalL'auteur VPel
J'ai eu un problème similaire où mon code VBA a bien fonctionné sur ma machine locale (Windows 7), mais en cours d'exécution à partir d'un serveur Citrix (Windows 2003 Server) n'a pas et a échoué avec une erreur de 430 lorsque vous essayez d'établir une connexion (Set Conn = New ADODB.La connexion).
Je ne pense pas que les différences dans les versions de windows jusqu'à ce que la lecture de ces réponses, et donc quand je décoché "Microsoft ActiveX Data Objects 2.8 Bibliothèque" et vérifié "Microsoft ActiveX Data Objects 2.7 Bibliothèque", tout a bien fonctionné.
Juste envie de les transmettre et de vous dire merci pour ces messages qui me mènent dans la bonne direction.
OriginalL'auteur Ned Bakelman