Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 将ListIndex设置为-1时ms Access运行时错误“2115”_Ms Access_Listbox_Runtime Error - Fatal编程技术网

Ms access 将ListIndex设置为-1时ms Access运行时错误“2115”

Ms access 将ListIndex设置为-1时ms Access运行时错误“2115”,ms-access,listbox,runtime-error,Ms Access,Listbox,Runtime Error,我发现表单基本上是一个大的列表框,带有一些过滤器、排序和操作按钮以及一些文本框来实现过滤器 我已经使用这些表单很长一段时间了,没有问题。除非从列表框中选择了一个项目,否则“选择”按钮将被禁用。当筛选或排序更改时,我将尝试取消选择任何列表框条目 为此,我将listbox no multi-selection选项的焦点设置为-1。有许多等效的操作,我已经尝试了其中的大多数操作。一旦ListIndex设置为-1,如果我对listbox执行重新查询操作或对包含表单执行刷新操作,则会出现“2115”运行时

我发现表单基本上是一个大的列表框,带有一些过滤器、排序和操作按钮以及一些文本框来实现过滤器

我已经使用这些表单很长一段时间了,没有问题。除非从列表框中选择了一个项目,否则“选择”按钮将被禁用。当筛选或排序更改时,我将尝试取消选择任何列表框条目

为此,我将listbox no multi-selection选项的焦点设置为-1。有许多等效的操作,我已经尝试了其中的大多数操作。一旦ListIndex设置为-1,如果我对listbox执行重新查询操作或对包含表单执行刷新操作,则会出现“2115”运行时错误。此外,我无法将焦点设置为任何表单上的文本框或按钮获取各种运行时错误,这些错误表示必须保存字段

有人知道这是怎么运作的吗

在代码段中,得到错误的实际代码是Unselect listbox注释后底部附近的.requery行

以下是我让这种情况发生的一种方式的代码片段:

    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

据我所知,您不必这样做。setfocus可取消选择列表框中的元素。您可能也应该在更改行源之前取消选择该元素,不是吗?最后,您不需要在选择之前检查元素是否已被选中。selected.listindex+1=false,否则您将得到一个错误。谢谢Dan,我的经验告诉您除非listbox具有焦点,否则更改选择行不会产生任何效果。更多至最后一条注释:IO最近尝试在更改行源之前将更改移动至。ListIndex更改后,我无法将焦点设置为listbox或任何其他控件。我遇到2118错误-必须在设置之前保存该字段g焦点。我们谈论的是什么字段?所讨论的列表框未绑定。我对此进行了测试,在不设置焦点的情况下更改所选属性没有问题。上面的代码从何处调用?按钮的单击事件还是?