我正在为坚持使用 MS Access 的人做一些工作。我通常不使用它,所以我对整个控制结构和最佳实践有点陌生。我想要实现的是在表单上有一个过滤器文本框,当输入一个值时,它将过滤详细信息部分中的行。这似乎是一个简单的用例。我最初尝试以下行为作为 On Change 事件的事件处理程序:
Private Sub FilterGrid()
Me.Text32.SetFocus
If Not IsNull(Me.Text32.Text) And Me.Text32.Text <> "" Then
Me.Filter = "JobNumber LIKE '*" & Me.Text32.Text & "*'"
Me.FilterOn = True
End
Else
Me.FilterOn = False
End If
End Sub
这工作得很好,直到我输入了一些没有任何行匹配的东西并且整个事情都因这个错误而爆炸(并且在不关闭表单的情况下无法恢复):运行时错误'2185':您不能引用属性或方法对于控件,除非控件具有焦点。
我做了一些阅读,普遍认为不应使用 .Text 而应该使用 .Value (或只是没有属性的 Text32 )。这产生了一些非常奇怪的行为。Text32.Value
始终为空。我有一个监视窗口,我可以看到对于正常行为,Text32.Text
它具有实际值,但Text32.Value
为 NULL。
显然我做错了什么,但我没有足够的 Access 经验来知道它是什么。
顺便说一句,另一个建议是 Text32.SetFocus
在访问 Text 属性之前立即执行。这并不能解决我提到的错误。它仍然抛出完全相同的错误。
有人能在这里指出我正确的方向吗?