La Force de vba pour attendre la requête sql à exécuter avant de continuer

Cela semble être un problème assez courant, mais aucune des solutions que j'ai trouvé l'air de fonctionner.

Je suis en saisissant des données à partir de SQL Server et de le copier dans une feuille de calcul. Alors je veux copier une gamme de nouvelles données et de faire d'autres choses avec elle. Tout cela se produit en une seule fonction vba.

Mon problème est que lorsque la fonction est exécutée à partir d'Excel, il se déplace sur la deuxième partie de la fonction, sans attendre que la requête renvoie les données requises.

Bien sûr la fonction fonctionne très bien quand je le lance à partir de l'IDE vba.

Dim a As New ADODB.Connection
Dim r As New ADODB.Recordset

a.Open (connStr)
Set r = a.Execute(sqlstr)

sht.Range("A2").CopyFromRecordset r

'please wait here until the proc has executed?

checkData = sht.Range("A2").Value

Quand je lance la fonction à partir d'Excel checkdata ce plug-in est toujours vide, quand je le lance avec la touche F5, qu'il a toujours les données requises.

Êtes-vous essayer de faire ça dans une fonction de feuille de calcul? Il ne fonctionne pas depuis une fonction ne peut retourner une valeur, il ne peut pas mettre à jour une feuille directement.
oui, je fais cela dans une fonction vba où sqlStr est une procédure stockée sql qui retourne les données requises.
Ensuite, utilisez simplement checkData = r.Fields(0).Value à moins qu'il n'y a plus de données à partir du jeu d'enregistrements dont vous avez besoin. Si vous avez besoin d'autres données, alors vous allez devoir trouver un moyen de faire tourner le code des autres que par le biais d'un fichier UDF.

OriginalL'auteur Skrealin | 2012-07-12