2017-06-15 6 views
0

Ceci est une position bizarre, et je me excuse à l'avance - je le dessous du code VBA dans un bouton ActiveX appelé « Refresh »:Tirer des données de SQL SP dans une feuille de calcul Excel à l'aide VBA

Sub Refresh_Click() 

With ActiveWorkbook.Connections("Lender Pipeline").OLEDBConnection 
.CommandText = "EXECUTE dbo.sp_Lender_Pipeline " & Range("Q2").Value 
End With 

ActiveWorkbook.Connections("Lender Pipeline").Refresh 

End Sub 

Ce qu'il fait essentiellement , extrait les données d'un SP SQL en fonction de la valeur de la cellule Q2 et actualise la table SP en fonction de cette valeur, qui est un nombre que j'ajoute manuellement dans la cellule. Ce nombre est généralement compris entre 1 et 120 (en fonction des identifiants dans le SP).

Le problème:

  • Il semble que tirer dans les données lors de la saisie de certains numéros. c'est-à-dire 29
  • Pour les autres numéros, je dois cliquer manuellement sur 'Actualiser tout'.
  • Si j'exécute le SP manuellement dans SQL Server Management, cela fonctionne parfaitement bien, donc le problème semble se situer dans le VBA.
  • Si j'exécute manuellement la SP à partir de la feuille de calcul Excel, il fonctionne aussi très bien ...

Quelqu'un at-il la moindre idée de pourquoi cela peut se produire? Pourrait-il être le VBA, ou quelque chose d'autre? Faites-moi savoir si des précisions supplémentaires sont nécessaires.

Merci.

+0

Avez-vous exécuté SQL Profiler pour vous assurer que le paramètre number est entré dans le SP comme prévu, et que la procédure est en cours? Le nom et le nombre de colonnes de retour sont-ils cohérents indépendamment du paramètre? Peut-être SET NOCOUNT ON; Il semble que ce soit le cas depuis que Refresh All semble fonctionner. Dans Excel 2013, vous avez maintenant une nouvelle option de case à cocher dans la connexion de données. La nouvelle option consiste à activer ou non une connexion spécifique si un "refresh all" est utilisé. Est-ce vérifié? Qu'en est-il de la case à cocher "Actualiser automatiquement lorsque la valeur de la cellule change"? Pêche ici, mais en essayant d'aider. :-) – DanielG

+0

Une chose qui fonctionnera presque toujours est que le SP remplit une table TEMP et base la table Excel sur la table TEMP, qui est mise à jour par le SP. – DanielG

Répondre

0

Assez curieusement, un de mes collègues avait le même problème auparavant. J'ai essayé un assortiment de correctifs et aucun ne semblait fonctionner, mais la reconstruction du classeur de la même manière semblait le corriger.

Pas la meilleure solution, mais cela a fonctionné dans le passé. Sinon, essayez d'utiliser VBA pour appeler la commande refreshall une fois que vous avez modifié le texte de la commande et voyez si cela vous aide.

0

Merci beaucoup pour vos suggestions - Il semblerait que l'actualisation de l'arrière-plan de désactivation dans les propriétés de connexion a fait l'affaire.