我有一个正在加载到记录集中的交叉表查询。然后我将查询字段写入Excel电子表格。问题是基于查询结果可能不存在字段。
例如,我有以下一行:
oSheet5.Range("F1").Value = rsB2("AK")
...它会将名为“AK”的记录集项的值写入电子表格。但如果“AK”不存在,我会收到错误Item not found in this collection
。
我如何测试是否有名为“AK”的项目?
我试过......
If rsB2("AK") Then
oSheet5.Range("F" & Count).Value = rsB2("AK")
End If
......但那没用。
我也试过......
If rsB2("AK") Is Nothing Then
oSheet5.Range("F" & Count).Value = ""
Else
oSheet5.Range("F" & Count).Value = rsB2("AK")
End If
......仍然是同样的错误。
有50多个项目/字段要检查..美国的所有州加上一些额外的东西。 谢谢!
答案 0 :(得分:4)
您可以使用Recordset.FindFirst Method (DAO)
查看here或here
小例子:
Sub FindOrgName()
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
'Get the database and Recordset
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("tblCustomers")
'Search for the first matching record
rst.FindFirst "[OrgName] LIKE '*parts*'"
'Check the result
If rst.NoMatch Then
MsgBox "Record not found."
GotTo Cleanup
Else
Do While Not rst.NoMatch
MsgBox "Customer name: " & rst!CustName
rst.FindNext "[OrgName] LIKE '*parts*'"
Loop
'Search for the next matching record
rst.FindNext "[OrgName] LIKE '*parts*'"
End If
Cleanup:
rst.Close
Set rst = Nothing
Set dbs = Nothing
End Sub
答案 1 :(得分:2)
你可以添加一个错误处理程序来捕获找不到错误的项目...忽略它和/或做其他事情。
或者,如果第一个记录集字段始终映射到第一个工作表列而不管字段的名称,您可以按其序号位置引用它:rsB2(0)
或者您可以在尝试检索其值之前检查记录集的Fields
集合以确认字段名称是否存在。
打开记录集后,加载包含字段名称的字典。此代码示例使用后期绑定。如果你想要早期绑定,我包括评论提示。早期绑定要求您为 Microsoft Scripting Runtime 设置引用。
Dim objDict As Object 'Scripting.Dictionary
'Set objDict = New Scripting.Dictionary
Set objDict = CreateObject("Scripting.Dictionary")
Dim fld As DAO.Field
For Each fld In rsB2.Fields
objDict.Add fld.Name, vbNullString
Next
之后您可以使用字典的Exists
方法。
If objdict.Exists("AK") = True Then
oSheet5.Range("F1").Value = rsB2("AK")
End If