Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.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 基于非绑定列重新查询后访问VBA还原列表框选择_Ms Access_Listbox_Vba - Fatal编程技术网

Ms access 基于非绑定列重新查询后访问VBA还原列表框选择

Ms access 基于非绑定列重新查询后访问VBA还原列表框选择,ms-access,listbox,vba,Ms Access,Listbox,Vba,因此,我继承了MS Access 2010(现在是2013)代码,该代码将一个列表框绑定到一个非唯一列。但是,该绑定值在代码中使用,因此,我无法更改绑定的列。但是,我有一个子表单需要重新查询父表单上的列表框。我正在努力解决的是如何将父列表框中的选择恢复到重新查询列表框之前选择的项目 我尝试在重新查询之前存储Parent.List0值,然后使用Parent.List0.Selected和Parent.List0.ItemData,但这些似乎不起作用,因为据推测,listbox绑定到一个非唯一的列

因此,我继承了MS Access 2010(现在是2013)代码,该代码将一个列表框绑定到一个非唯一列。但是,该绑定值在代码中使用,因此,我无法更改绑定的列。但是,我有一个子表单需要重新查询父表单上的列表框。我正在努力解决的是如何将父列表框中的选择恢复到重新查询列表框之前选择的项目

我尝试在重新查询之前存储Parent.List0值,然后使用Parent.List0.Selected和Parent.List0.ItemData,但这些似乎不起作用,因为据推测,listbox绑定到一个非唯一的列

列表框中有一列是唯一的。第4列(第(3)列)是唯一的,但我没有找到一种方法来根据绑定列以外的列选择listbox项


我相信有人有一些想法可以解决这个问题,但我在搜索web时找不到任何解决方案。

我在2010版,在测试时,我无法复制列表框失去价值的情况。既不在绑定窗体上,也不在未绑定窗体上

无论如何,第3列似乎有一个唯一的键,所以您可以使用它

' Assuming this code runs from within the sub-form
KeyID = Me.Parent.Controls("MyListBox").Column(3)
With Me.Parent.Controls("MyListBox")
  .Requery ' Or do whatever you do that causes it to requery

  ' Find the previously selected item and select
  For i = 0 To (.ListCount - 1)
    If .Column(3, i) = KeyID Then
      .Selected(i) = True
      Exit For
    End If
  Next
End With

这应该可以解决问题。

对:它确实会改变,因此问题就来了。但是,改变只会发生在一个字段中的一个值上。我需要显示更改,但列表中项目的#不会更改,列表中项目的顺序也不会更改。但是,我无法获得.selected(prevListIndex)=True来实际选择正确的项——没有错误,它只是没有选择列表框中的任何项。我确实考虑过for..next循环,但似乎有一种更好的方法,比循环100个项目要好。我想我必须这么做。太棒了!非常感谢你,DHW。这很有效,速度也很快。我仍然无法理解为什么不能将listbox设置为列表中的特定行索引——似乎Access应该存储与列表中存储的实际数据无关的索引引用。但是,由于它没有,您的代码很好地解决了它。非常感谢。对于后来发现此线程的人,我对DHW的代码应用了一个小的调整:我将其改为.Column(2)和.Column(2,I),而不是.Column(3)和.Column(3,I),因为Column 4是唯一的列,.Column属性是零基的(不同于绑定列属性,它从1开始,而不是0)。我将进行编辑。要回答有关保留列表索引的访问权限的问题,请在重新查询期间更改列表框的内容。正如我在回答中指出的,我做了一个测试数据库以确保我的解决方案是有效的,我注意到Access保留了ListBox值。也可能有一种直接使用windows API调用设置Listbox控件的方法,但这可能是试图用大炮杀死蚊子。