基本的に、いくつかのフィルター、並べ替え、アクションボタン、およびフィルターを実装するためのいくつかのテキストボックスを備えた大きなリストボックスである検索フォームがあります。
私は問題なくこれらのフォームをかなり長い間使用しています。リストボックスから項目を選択しない限り、SELECT ボタンは無効になります。フィルタリングまたはソートが変更されたときに、リストボックスのエントリを選択解除しようとしています。
これを行うには、リストボックス (複数選択オプションなし) にフォーカスを -1 に設定します。同等のアクションが多数あり、私はそれらのほとんどを試しました。ListIndex が -1 に設定されると、リストボックスで再クエリ アクションを実行するか、含まれているフォームで更新アクションを実行すると、'2115' ランタイム エラーが発生します。さらに、フィールドを保存する必要があるというさまざまな実行時エラーが発生して、フォーム上のテキスト ボックスまたはボタンにフォーカスを設定できません。
これがどのように機能するかについて誰か考えがありますか?
コード スニペットでは、エラーを取得する実際のコードは、Unselect listbox コメントの後の下部近くにある .requery 行です。
これは、私がこれを発生させた方法の1つのコードスニペットです。
With Me.lbxFoundItems
If strCurrentSearchText = vbNullString Then 'Nothing to search for
.Visible = False
Call ButtonSettings
Exit Sub
End If
strQry = strSql & strWhere & strOrderBy
If Nz(.RowSource, vbNullString) = vbNullString Then 'First time through
Set qry = Nothing
On Error Resume Next
Set qry = CurrentDb.CreateQueryDef(strQname, strQry)
If qry Is Nothing Then
Set qry = CurrentDb.QueryDefs(strQname)
qry.sql = strQry
End If
colGarbage.Add CurrentDb.QueryDefs(qry.Name), qry.Name
.RowSource = qry.Name
Else
CurrentDb.QueryDefs(qry.Name).sql = strQry
End If
' Unselect the listbox entry
.SetFocus
.Selected(.ListIndex + 1) = False
.Requery
Me.Refresh
Me.tbxListCount = .ListCount - 1
.Visible = True
End With