我试图在下面的代码中找到第一个空值。我可以只在select中使用where,但它将删除非空值。我想保留整个记录集,这样我就可以使用rs.AbsolutePosition向用户报告哪一行为null。我基本上将其设置为将用户在临时表中输入的信息与另一个表进行比较。如果匹配的字符串在那里,它就会出现,否则在记录集中应该是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
它现在基本上什么都不做。甚至不会触发错误或不匹配。我做错了什么?
发布于 2017-07-21 08:11:44
你的代码缩进关闭了,把你我都骗了。
这就是你想要的--你错过了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"
的性能可能会更好一些。
https://stackoverflow.com/questions/45214858
复制相似问题