1

我有一个正在加载到记录集中的交叉表查询。然后,我将查询字段写入 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 多个项目/字段要检查 .. 美国的所有州以及一些额外内容。谢谢!

4

2 回答 2

4

你可以使用Recordset.FindFirst Method (DAO)看看这里这里

小例子:

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
于 2013-08-19T15:08:41.403 回答
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
于 2013-08-19T15:12:01.340 回答