2017-05-08 148 views
0

我正在嘗試使用自定義函數來複制VLOOKUP功能,以便將數據從Access數據庫中提取到Excel電子表格中。從來沒有做過這個,但我的理解是,這應該工作:如何使用ADO查詢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這就是問題所在,但是我可以在網上找到的所有東西都說這是正確的方法,所以我不知所措。

+0

我覺得很難相信代碼將作爲一個子工作,因爲它應該是:'Set rs = New ADODB.RecordSet'而不是'Set rs = New ADODB.Record' – Rory

+0

在我的調整中的錯字是所有這是因爲當我說「我把它作爲一個Sub工作」時,我並沒有撒謊。 –

+0

好吧,如果你改正了,它也可以作爲一個函數 - 假設db路徑是正確的,並且實際上有匹配輸入條件的記錄。 – Rory

回答

1

如果您糾正這一點,

Set rs = New ADODB.Record 

這樣:

Set rs = New ADODB.RecordSet 

那麼它將會起到一個功能,只要該數據庫的路徑是正確的,實際上有匹配輸入條件的記錄。你應該真的添加一些錯誤處理。

相關問題