我正在尝试在以下代码中找到第一个空值。我可以在select中使用where,但它会删除非null值。我想保留整个记录集,以便我可以使用rs.AbsolutePosition向用户报告哪一行为空。我基本上已将其设置为将临时表中用户输入的信息与另一个表进行比较。如果出现匹配字符串,则记录集应为null。
strSQL = "SELECT Tbl_Temp.ID, Tbl_List.String FROM Tbl_Temp LEFT JOIN Tbl_List ON Tbl_Temp.string = Tbl_List.string"
Set rs = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset)
strIsN = "IsNull(string)"
rs.FindFirst strIsN
If rs.NoMatch Then
MsgBox "no null values"
Do While Not rs.NoMatch
MsgBox "Found null" & rs.AbsolutePosition
rs.FindNext strIsN
Loop
rs.FindNext strIsN
End If
它现在基本上什么也没做。甚至不会触发错误或不匹配。我做错了什么?
答案 0 :(得分:1)
您的代码缩进已关闭,并且欺骗了您和我。
这就是你想要的 - 你错过了Else
。
RS.FindFirst strIsN
If RS.NoMatch Then
MsgBox "no null values"
Else
Do While Not RS.NoMatch
Debug.Print "Found null " & RS.AbsolutePosition
RS.FindNext strIsN
Loop
End If
请阅读How to debug VBA code,单步执行代码会立即发现问题。
"IsNull(string)"
和"[String] Is Null"
都可以,但"[String] Is Null"
可能会有所改善。