我在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中尝试做什么?
答案 0 :(得分:2)
如果您想引用名称存储在变量myKey
中的字段的值,请使用此...
myR.Fields(myKey)
无论您的记录集是DAO还是ADO对象,都可以使用。
错误3265,“此集合中找不到项目”,不是对阵列的投诉。它告诉你你的记录集没有字段,其文字名称是“myKey”。也许这段代码会让它更清晰。它的编写没有错误。取消前两条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
答案 1 :(得分:0)
不确定你在这里要做什么。 “key1”是字段名还是值?
当你写myR![myKey]时,myKey是一个字段名。
如果它应该是一个值,那么你将得到错误。例如,如果“key1”,“key2”,“key3”是员工ID号(比如10,20和30),那么你试图做的就是问IsNull(myR![10]),因为那里有没有名为10的字段,它会出错。
希望这有帮助。