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文字列データ型でなければならないことを宣言しました:

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変更イベントから実行しています。before updateイベントを使用して値を検証し、after updateイベントを使用して有効な値で実行したい他のこと(フィルター条件を適用しますか?)を実行することを検討してください。

于 2012-08-16T01:28:24.450 に答える