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 中尝试做的事情甚至可能吗?

4

2 回答 2

2

如果要引用名称存储在变量中的字段的值myKey,请使用此...

myR.Fields(myKey)

无论您的记录集是 DAO 还是 ADO 对象,这都会起作用。

错误 3265,“在此集合中找不到项目”,不是对数组的抱怨。它告诉您您的记录集没有字面名称为“myKey”的字段。也许这段代码会让它更清晰。它可以正常工作,没有错误。取消注释前 2Debug.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
于 2012-05-08T14:35:48.877 回答
0

不知道你想在这里做什么。“key1”是字段名还是值?当您编写 myR![myKey] 时,myKey 是一个字段名。

如果它应该是一个值,那么你会得到错误。例如,如果“key1”、“key2”、“key3”是员工 ID 号(比如 10、20 和 30),那么您尝试做的是询问 IsNull(myR![10]),因为没有字段名为 10,它给出了一个错误。

希望这可以帮助。

于 2012-05-08T14:30:57.753 回答