在Access多列列表框中设置“已选择”值

时间:2012-06-17 19:34:45

标签: ms-access listbox set selected multiple-columns

我在Access窗体上使用了几个绑定的ListBox控件。 ListBox内容是相关的,因此,除了其他内容,当用户单击一个ListBox时,所选行可以在其他列中更改。一切正常,只要ListBox有一个列,我已经做了很多次。我使用超简单的VBA语法     lstBoxWhosis =" SomeText"

只要ListBox确实包含该项,所选行就会成为包含该文本的行,而不需要其他搜索,查找或重新定位命令。

我目前头疼的是一个多列ListBox。最左边的列没有唯一的条目,当我使用上面的语法时,我得到一个重新定位,但只到包含文本的FIRST行。我需要根据两列中的值进行定位。是否有一些类似的方法使用多列执行此操作,或者我是否必须手动搜索ListBox内容?

我已经尝试使用空格,逗号和分号连接列,还有语法

  

lstBoxWhosis = array(" SomeText1"," SomeText2")

没有任何运气。

Remou:

我现在这样做,而且实际上相当简单。这是代码:

lstSpoje = lstKatastr
Do Until lstSpoje.Column(1) = lstOblast
  lstSpoje.Selected(lstSpoje.ListIndex + 1) = True
Loop

第一行直接定位到第一列中块的开头,第二行定位于第一行,检查第二列直到获得正确的行。重复数量不保证更有效的搜索方法。它可以正常工作,除了在重新定位期间显示器颤动。

否则,我发布了我认为相关的一切。如我在第一句中所述,ListBox绑定,这意味着它们基于表或查询。如果您认为某些其他信息可能有助于某人解决此问题,请告诉我这可能是什么。

Remou:

是的,这无疑会奏效。我实际上已经做了类似的事情,其中​​一个ListBoxes有近15,000个项目,所以为了帮助用户找到东西,我放入26个CommandButtons,带有字母,将ListBox移动到那个字母的开头。我使用以下代码来定位ListBox

x = ActiveControl.Caption
i = CurrentDb.OpenRecordset("SELECT Count(*) FROM TableOfKatastrs WHERE Left(Katastr,1)<'" & x & "'").Fields(0)
lstKatastr.Selected(i) = True

我可能会为此采用类似的方案 - 它可以摆脱闪烁的问题,并且可以更快地启动。但我希望通过我的第一个例子的简单性来获得一些鲜为人知的语法,其中一行代码可以做到一切:

lstBoxWhosis = "SomeText"

Remou:

由于我使用了两列,因此我选择了两个人。 :)但是严肃地说,简单的赋值语法是如此简单和优雅,并且经常有一些奇怪的措辞很少使用,鲜为人知,解决了这样的问题。我尝试过各种其他的事情,比如

lstSpoje.Column(1) = "SomeText2"

但我得到的只是语法错误。也许它真的只适用于第一列(或唯一)。

1 个答案:

答案 0 :(得分:0)

我正在寻找这些方面的东西,然后跑过这个老帖子。我知道这是一种方式,所以更多的是本质上为未来的读者填写信息,这些读者可能会在搜索档案时遇到这种情况。

我想出了另一种方法 - DUPLICATE 列(或连接列到一列),我希望通过它设置列表框的正确行,作为FIRST列,以及使其宽度为零。它不会显示,因此列表框看起来与用户不同,但标准语法为

lstBoxWhosis = "value"
然后

将正常工作。