Modifier une Chaîne de Connexion incorporée dans microsoft excel macro
J'ai un document Excel est une macro qui lors de l'exécution de modifier un CommandText
de cette connexion pour passer des paramètres à partir de la feuille de calcul Excel, comme suit:
Sub RefreshData()
ActiveWorkbook.Connections("Job_Cost_Code_Transaction_Summary")
.OLEDBConnection.CommandText = "Job_Cost_Code_Transaction_Summary_Percentage_Pending @monthEndDate='" & Worksheets("Cost to Complete").Range("MonthEndDate").Value & "', @job ='" & Worksheets("Cost to Complete").Range("Job").Value & "'"
ActiveWorkbook.Connections("Job_Cost_Code_Transaction_Summary").Refresh
End Sub
Je voudrais l'actualisation non seulement de modifier la commande de connexion, mais aussi modifier la connexion que je voudrais l'utiliser avec une autre base de données:
Tout comme la macro remplace les paramètres de la commande avec les valeurs de la feuille de calcul, j'aimerais qu'il faut également remplacer la base de données nom du serveur et le nom de base de données à partir des valeurs de la feuille de calcul.
Une mise en œuvre complète n'est pas nécessaire, juste le code pour modifier la connexion avec les valeurs de la feuille sera suffisant, je devrais être capable de le faire fonctionner à partir de là.
J'ai essayé de faire quelque chose comme ceci:
ActiveWorkbook
.Connections("Job_Cost_Code_Transaction_Summary")
.OLEDBConnection.Connection = "new connection string"
mais qui ne fonctionne pas. Merci.
Avez-vous jamais trouver une solution pour ce problème? Si oui, je serais très heureux que vous partagiez avec nous.
courant encore de modifier manuellement la chaîne de connexion, malheureusement.
BTW la propriété est Connexion pas ConnectionString:
ActiveWorkbook.Connections("Job_Cost_Code_Transaction_Summary").OLEDBConnection.Connection = "new connection string"
toutes les idées de pourquoi il en résulte une erreur :
ActiveWorkbook.Connections("Job_Cost_Code_Transaction_Summary").OLEDBConnection.Connection = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=ADCData_Doric;Data Source=doric-server5;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=LHOLDER-VM;Use Encryption for Data=False;Tag with column collation when possible=False"
OriginalL'auteur lukemh | 2013-11-21
Vous devez vous connecter pour publier un commentaire.
La réponse à ma question ci-dessous.
Toutes les autres réponses sont la plupart du temps correct et de se concentrer sur la modification de la connexion en cours, mais je veux juste envie de savoir comment définir la chaîne de connexion de la connexion.
Le bug est venue à cette situation. Si vous regardez ma capture d'écran, vous verrez que la chaîne de connexion est:
Je tente de mettre sur cette chaîne avec
ActiveWorkbook.Connections("Job_Cost_Code_Transaction_Summary").OLEDBConnection.Connection = "connection string"
Je recevais un message d'erreur quand j'essayait simplement d'affecter la chaîne complète de la Connexion. J'ai été en mesure de MsgBox la chaîne de connexion en cours avec cette propriété, mais pas l'ensemble de la chaîne de connexion de retour sans l'obtention de l'erreur.
Depuis, j'ai trouvé que la chaîne de connexion doit avoir
OLEDB;
ajouté à la chaîne.si cela fonctionne maintenant!!!
très subtil, mais c'était le bug!
OriginalL'auteur
Je pense que vous êtes si près d'obtenir ce que vous voulez.
J'ai été capable de changer de ODBCConnection. Désolé que je ne pouvais pas le programme d'installation OLEDBConnection pour tester, vous pouvez modifier les occurrences de ODBCConnection à OLEDBConnection dans votre cas.
Essayez d'ajouter ces 2 sous-marins avec la modification, et de le jeter dans ce que vous avez besoin de remplacer, dans la CommandText et Chaîne de Connexion. Remarque j'ai mis
.Refresh
pour mettre à jour la connexion, vous ne pouvez pas besoin jusqu'à l'actualisation des données est nécessaire.Vous pouvez modifier d'autres champs à l'aide de la même idée de casser les choses alors Rejoindre plus tard:
OriginalL'auteur
Vous pouvez utiliser une fonction qui prend le OLEDBConnection et les paramètres de mise à jour, comme les entrées, et retourne la nouvelle chaîne de connexion. Il est similaire à la Jzz de la réponse, mais permet une certaine souplesse sans avoir à modifier la chaîne de connexion dans le code VBA chaque fois que vous voulez changer - au pire tu aurais à ajouter de nouveaux paramètres pour les fonctions.
Remarque que j'ai modifié ce de code que j'ai utilisé pour une application particulière, il est donc en partie testé et peut-être besoin de quelques ajustements avant de totalement répond à vos besoins.
Note que bien que c'aurez besoin d'une sorte de code d'appel en tant que bien, ce qui serait (en supposant que le nouveau catalogue et de la source de données sont stockés dans les cellules de la feuille):
OriginalL'auteur
Cela devrait faire l'affaire:
En boucle à chaque connexion dans votre classeur et modifier la Chaîne de Connexion (dans les 2 remplacer consolidés).
Afin de modifier votre exemple:
OriginalL'auteur
Je voudrais donner ma petite contribuer ici à ce vieux sujet.
Si vous avez beaucoup de liens dans votre fichier Excel, et vous voulez changer le nom DB et DB serveur pour le tout, vous pouvez utiliser le code suivant:
Cette façon, vous n'avez pas besoin d'utiliser de remplacer et d'en connaître la valeur précédente, et le reste de la chaîne restera intacte.
Aussi, nous pouvons nous référer à un nom de cellule, de sorte que vous pouvez avoir un nom de votre fichier Excel
J'espère que cela peut aider
OriginalL'auteur
Je suppose qu'il est nécessaire pour vous de garder la même connexion-nom? Sinon, il serait plus simple de l'ignorer et de créer une nouvelle Connexion.
Vous pouvez renommer la connexion, et en créer un nouveau en utilisant le nom:
Par la suite,
Delete
cette connexion et de rétablir l'ancienne connexion/nom. (Je ne peux pas tester moi-même actuellement, alors de la bande de roulement soigneusement.)Alternativement, vous pouvez modifier les connexions en cours
SourceConnectionFile
:Généralement, cela fait référence à un .odc fichier (Office Data Connection) enregistré sur votre système qui contient les détails de la connexion. Vous pouvez créer ce fichier à partir de la Fenêtre du Panneau de Contrôle.
Vous n'avez pas spécifié, mais un .odc fichier est peut-être ce que votre connexion actuelle.
Encore une fois, je ne suis pas en mesure de tester ces suggestions, vous devez examiner de plus et de prendre certaines précautions afin de ne pas risquer de perdre la connexion en cours de détails.
OriginalL'auteur