【发布时间】:2017-05-08 14:44:58
【问题描述】:
我几乎正在尝试使用自定义函数复制 VLOOKUP 功能,以将数据从 Access DB 提取到 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
代码运行,但返回一般 #VALUE 错误。我可以在带有Sheet1.Range("A1").CopyFromRecordSet 的Sub 中使用相同的连接字符串,它会按预期运行,将数据库中的第一行放到我的工作表中。所以问题一定是query = rs.Fields(0).Value,但我在网上找到的所有内容都表明这是正确的方法,所以我很茫然。
【问题讨论】:
-
我很难相信代码会作为子代码工作,因为它应该是:
Set rs = New ADODB.RecordSet而不是Set rs = New ADODB.Record -
我的调整中的错字就是全部,当我说“我让它作为一个子工作”时,我没有撒谎。
-
好吧,如果你更正了,它也可以作为一个函数工作——假设数据库路径是正确的并且实际上有匹配输入条件的记录。
-
headdesk。啊,上帝,我讨厌生活。谢谢 - 作为答案发布,您将获得代表:)
标签: excel ms-access ado ms-access-2016 vba