2012-05-08 84 views
1

我在Access數據庫中有這個小的VBA腳本。我想做一些場比較。在其他語言中,我將能夠創建一組鍵,然後使用for..each循環來測試每個鍵。事情是這樣的:我可以使用字符串數組作爲記錄集中的鍵嗎?

string[] myKeys = { "key1", "key2", "key3" }; 
foreach(string myKey in myKeys) 
{ 
    if(myRecordset!myKey == myTable!myKey) DoSomething() 
} 

我想這在VBA,但它給了我運行時錯誤「3265」:使用下面的代碼,當項目這個集合中找不到:

For Each myKey In myKeys 
    If Not IsNull(myR![myKey]) Then Me.Recordset![myKey] = myR![myKey] 
Next myKey 

是什麼我想盡可能在​​VBA中做到這一點?

回答

2

如果你想引用一個字段名稱存儲在變量myKey的值,用這個...

myR.Fields(myKey) 

,將工作你的記錄是否是一個DAO或ADO對象。

錯誤3265「在此集合中找不到的項目」不是關於該數組的投訴。它告訴你你的記錄集沒有字段名爲「myKey」的字段。也許這個代碼會使它更清晰。它的工作原理沒有錯誤。對第一條2 Debug.Print行取消註釋將觸發錯誤3265.

Public Sub foo() 
    Const myKey As String = "id" 
    Dim db As DAO.Database 
    Dim rs As DAO.Recordset 
    Dim strSelect As String 
    strSelect = "SELECT id FROM MyTable;" 
    Set db = CurrentDb 
    Set rs = db.OpenRecordset(strSelect) 
    'Debug.Print rs![myKey] 
    'Debug.Print rs!myKey 
    Debug.Print rs.Fields(myKey) 
    rs.Close 
    Set rs = Nothing 
    Set db = Nothing 
End Sub 
+0

這與我希望的完全相同。謝謝。除非你明確知道它是什麼,否則似乎沒有關於字段的很多信息。這實際上是我第一次在VBA中進行任何類型的編程,而且與其他語言完全不同。 –

+0

VBA需要一些幫助。 :-)如果'myR'是'DAO.Recorset',在你的代碼中你可以輸入'myR.',然後讓Intellisense顯示可用的方法和屬性。如果它是'ADODB.Recordset'並且您已經爲Microsoft ActiveX Data Objects設置了引用,則可以執行相同的操作。 – HansUp

0

不知道你要在這裏做什麼。 「key1」是一個字段名還是一個值? 當你寫myR![myKey]時,myKey是一個字段名。

如果它應該是一個值,那麼你會得到錯誤。例如,如果「key1」,「key2」,「key3」是員工ID號碼(比如說10,20,&30),那麼你試圖做的是問IsNull(myR![10]),並且因爲沒有字段稱爲10,它會給出錯誤。

希望這會有所幫助。

相關問題