J'ai ouvert une nouvelle connexion ADODB et définir un nouveau jeu d'enregistrements qui ont des dates dans le premier champ et des valeurs dans le deuxième champ.Excel VBA, connexion ADO, renvoie la date si elle existe ou la date disponible précédente
- 01/01/2016
- 02/01/2016
- 04/01/2016
- 05/01/2016
Je vais construire la fonction myfunction(mydate)
qui devrait renvoyer la date disponible maximale qui est égale ou inférieure (plus tôt) à mydate:
myfunction(mydate as date)
Dim CurrentDate as Date
Set rst = cn.Execute("SELECT * FROM tbl1 ORDER BY dates;")
CurrentDate = worksheetfunction.INDEX(rst.Fields(0),worksheetfunction.MATCH(CDate(CurrentDate),rst.Fields(0), 1))
myfunction = CurrentDate
end function
Les résultats devraient être
- myfunction ("01/02/2016") = 01/02/2016
- myfunction ("01/03/2016") = 02/01/2016
Cela fonctionne sur Excel Speadsheet, mais il donne une erreur "Impossible d'obtenir la propriété Match de WorksheetFunction". Existe-t-il un autre moyen d'obtenir le résultat en utilisant ce tableau?
Vous pouvez utiliser une clause WHERE dans votre SQL? Et peut-être un TOP? –
Le problème est que le jeu d'enregistrements devrait être utilisé pour plusieurs fonctions, donc je ne peux pas utiliser WHERE .. Ceci est la version courte de mon code. –
En ce moment, vous ne passez qu'une seule valeur (Fields (0) en tant que second paramètre de Match où un tableau de valeur est attendu, c'est peut-être pourquoi le message –