1

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

我把这个功能放在哪里?我正在考虑将代码添加到 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
4

1 回答 1

0

"发生的情况是,当在列表中键入文本时,而不是在后面捕获字符串,而是抛出一个错误,指示组合框为 Null。 "

您声明searchStr必须是 String 数据类型:

Dim searchStr As String

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

searchStr = txtUSPSKeySearch.Value

当为 Null时,您可以使用该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更改事件中执行所有这些操作。考虑使用更新前事件来验证值,并使用更新后事件来执行您想要对有效值执行的任何其他操作(应用过滤条件?)。

于 2012-08-16T01:28:24.450 回答