VBA检查来自2个字段的不同值是不是匹配

Posted

技术标签:

【中文标题】VBA检查来自2个字段的不同值是不是匹配【英文标题】:VBA check if distinct values from 2 fields matchVBA检查来自2个字段的不同值是否匹配 【发布时间】:2015-06-11 13:41:35 【问题描述】:

我对 VBA 非常陌生,但有一些编码经验,所以我正在慢慢开始学习。我的访问数据库中有两个表,每个表都有一个相同的字段。一个表是可能值的不同列表(“TOSITEXREF”),可能会显示在另一个表(“Trans_Earned”)的同一字段中。我试图创建的这个函数将在宏中运行,以确定通过查询附加的数据是否在 ToLocn 字段中具有不在可能值列表中的实例。这是我到目前为止所拥有的,但没有工作:

Function TESTING()

Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("TransEarned")

Dim rs2 As DAO.Recordset
Set rs2 = CurrentDb.OpenRecordset("TOSITEXREF")

Dim cond1A As Boolean

cond1A = (rs.Fields("ToLocn") = rs2.Fields("ToLoc"))

If cond1A Then
    DoCmd.OpenQuery "Earns", acViewNormal, acEdit
Else
    DoCmd.CancelEvent
    MsgBox "Unknown ToLocation, Please Update TOSITEXREF File to acccount for new location", vbOKOnly, "NEW LOCATION"
End If

Set rs = Nothing
Set rs2 = Nothing

End Function

【问题讨论】:

你是如何遍历你的记录集的? (抱歉,对 vba 一无所知,但我认为您的记录集是每个表中的多行,因此您必须以某种方式遍历它们) 我会创建一个将表连接在一起的查询,然后在查询中搜索您的预期值。如果记录集中没有行,则没有匹配项。相反,如果您有 1 行或更多行,则存在匹配项。 @Jeremy 我不知道您可以将 sql 语句存储在一个字符串中,然后使用该字符串来定义记录集的数据,您的评论帮助了很多,我想通了! 【参考方案1】:

最终的 VBA 示例将在 table1 的 Loc 字段中返回一个值,而该值不会显示在 Table2 的 Loc 字段中:

Function Validate()

Dim sql As String
Dim rs As DAO.Recordset

sql = "SELECT Table1.Loc FROM Table1 LEFT JOIN Table2 ON Table1.Loc =  Table2.Loc WHERE (((Table2.Loc) Is Null))"
Set rs = CurrentDb.OpenRecordset(sql)

If (rs.RecordCount = 0) Then
     MsgBox "WORKS", vbkokonly, "WORKS"
Else
     MsgBox "DOES NOT WORK", vbkokonly, "DOES NOT WORK"

Set rs = Nothing

End If
End Function

【讨论】:

以上是关于VBA检查来自2个字段的不同值是不是匹配的主要内容,如果未能解决你的问题,请参考以下文章

访问 VBA - 使用组合框(多值字段)时类型不匹配

我需要比较 2 个不同数据帧的 2 个字段,如果它匹配我们需要填充详细信息,否则在 python 中用空值填充

检查VBA中的列中是不是存在值

有没有办法设置猫鼬来检查两个值是不是在一个模式中匹配?

根据日期检查来自同一表的记录,其中包含多行中的不匹配值

VBA 代码填充 7 个相邻单元格中的索引匹配函数