2014-02-14 88 views
2

如何創建用於從訪問數據庫檢索數據的UDF。用於從訪問數據庫檢索數據的UDF

我可以通過sql查詢使用vba &點擊按鈕來檢索數據。數據將在記錄集中。我只需將它粘貼到任何單元格。

現在我的問題是:如何創建一個用戶定義的功能來做同樣的事情。也就是說,當我在任何Excel單元格中輸入=bdh(pricing date,product tag)之類的東西時,所有數據都會返回並粘貼到我輸入自定義公式的單元格下面。

如果您熟悉bloomberg API,我想構建一個類似於bdh函數的函數。

+0

傑克您好,我相當肯定,那是不可能通過一個UDF做。函數不能更改所選單元格外的任何單元格。你最好的選擇是將一個記錄集作爲一個數組函數返回。彭博社提供的數據服務可以監視Excel,它是數據服務,而不是將額外數據放在下面的單元格中的功能。據我瞭解,這是一個非常艱難的實施過程。你可以通過實施一個聰明的細胞更換事件來產生某種黑客行爲,但我懷疑這是值得的。 – Dan

+0

BTW一些​​問題,顯示如何編寫一個數組函數,返回一個記錄集(從SQL,但我認爲你可以只是改變提供商在連接字符串獲取訪問):http://stackoverflow.com/questions/15927485/return-dates-not-strings-from-an-adodb-query或http://stackoverflow.com/questions/17597485/using-the-same-parameter-twice – Dan

+0

嗨。擔。非常感謝您的幫助。我的老闆說我可以通過某種數組功能來做到這一點。真的嗎?你是否說沒有辦法將數據粘貼到單元格下方,我沒有像任何事件更改那樣進入我自己的BDH函數。謝謝。 –

回答

2

也許你可以解決一個更簡單的想法嗎?例如下面的代碼片段取決於用戶選擇兩個輸入單元來控制輸出。你可以添加一個菜單項來運行代碼。

Sub GetMSAccess() 
Dim cn As New ADODB.Connection 
Dim rs As New ADODB.Recordset 
Dim selrange As Range 

    Set selrange = Selection 

    strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Z:\Docs\Test.accdb" 

    cn.Open strCon 

    sSQL = "SELECT var1, var2 FROM table2 " _ 
    & "WHERE var1='" & selrange.Cells(1, 1).Value _ 
    & "' AND var2=" & selrange.Cells(1, 2).Value 
    rs.Open sSQL, cn 

    ActiveCell.Offset(1, 0).CopyFromRecordset rs 
End Sub 

例如

select cells