Je tente presque de répliquer la fonctionnalité VLOOKUP avec une fonction personnalisée pour récupérer des données dans une feuille de calcul Excel à partir d'une base de données Access. Jamais fait cela avant, mais je crois comprendre que cela devrait fonctionner:Comment utiliser ADO pour interroger l'accès db dans les fonctions personnalisées d'Excel
Function query(lookup_value)
Dim cnn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim sQRY As String
Dim strFilePath As String
strFilePath = "Z:\filepath\database.accdb"
Set cnn = New ADODB.Connection
Set rs = New ADODB.Recordset
cnn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source = " & strFilePath & ";Jet OLEDB:Database Password=password;"
cnn.Open
sQRY = "SELECT TOP 1 Ethnic FROM central_reference_table WHERE LearnerCode = '" & lookup_value & "'"
rs.Open sQRY, cnn
query = rs.Fields(0).Value
rs.Close
Set rs = Nothing
cnn.Close
Set cnn = Nothing
End Function
Le code est exécuté, mais renvoie l'erreur #VALUE générique. Je peux utiliser la même chaîne de connexion dans un Sub avec Sheet1.Range("A1").CopyFromRecordSet
et cela fonctionnera comme prévu, en supprimant la première ligne de la base de données dans ma feuille de calcul. Le problème est donc le query = rs.Fields(0).Value
, mais tout ce que je peux trouver en ligne me dit que c'est la bonne façon de le faire, donc je suis à court de ressources.
J'ai du mal à croire que le code fonctionne comme un sous-marin puisqu'il devrait être: 'Set rs = New ADODB.RecordSet' et non' Set rs = New ADODB.Record' – Rory
Typo dans mes tweaks est tout, prendre il est donné que je ne mens pas quand je dis "je l'ai eu comme un sous-marin". –
Eh bien, si vous corrigez cela, cela fonctionne aussi comme une fonction - en supposant que le chemin db est correct et qu'il y a effectivement des enregistrements correspondant aux critères d'entrée. – Rory