MS Access Filter连续表格

时间:2012-08-16 00:48:58

标签: vba ms-access

我需要使用从组合框中输入或选择的字符串来过滤连续形式。下面是我试图用来捕获过滤字符串的代码。当文本被输入到列表中而不是在后面捕获字符串时,会发生错误,而是抛出错误,指示组合框为空。

我在哪里放这个功能?我想只是将代码添加到Combobox_Selected事件,但这不会让用户能够键入任意关键字,以进一步过滤表单的内容。

Private Sub txtUSPSKeySearch_Change()
On Error GoTo Err_txtUSPSKeySearch_Change
Dim searchStr As String

               searchStr = txtUSPSKeySearch.Value
                  If (Not IsNull(searchStr) And Len(searchStr) > 1) Then

                  Else

                    ' Move the cursor to the end of the combo box.
  Me.txtUSPSKeySearch.SetFocus
  Me.txtUSPSKeySearch.SelStart = Len(Me.txtUSPSKeySearch.Value)
                 End If

'Error Handling
Exit_txtUSPSKeySearch_Change:
    Exit Sub
Err_txtUSPSKeySearch_Change:
    If Err.Number = 5 Then
         MsgBox "You must make a selection(s) from the list" _
               , , "Selection Required !"
        Resume Exit_txtUSPSKeySearch_Change
    Else
        'Write out the error and exit the sub
        MsgBox Err.Description
        Resume Exit_txtUSPSKeySearch_Change
    End If
End Sub

1 个答案:

答案 0 :(得分:0)

当文本被输入到列表中而不是后面捕获的字符串时,会发生错误,而是抛出错误,指示组合框为空。

您声明searchStr必须是字符串数据类型:

Dim searchStr As String

txtUSPSKeySearch为空时,此赋值将失败,因为Null不是字符串数据类型。

searchStr = txtUSPSKeySearch.Value

Nz()为空时,您可以使用searchStr函数为txtUSPSKeySearch提供空字符串:

searchStr = Nz(Me.txtUSPSKeySearch.Value, vbNullString)

然后你可以改变这个If语句......

If (Not IsNull(searchStr) And Len(searchStr) > 1) Then

到此......

If Len(searchStr) = 0 Then

您正在通过txtUSPSKeySearch更改事件执行所有操作。考虑使用before update事件来验证值,并使用after update事件来执行您想要对有效值执行的任何其他操作(应用过滤条件?)。