我在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"
但我得到的只是语法错误。也许它真的只适用于第一列(或唯一)。
答案 0 :(得分:0)
我正在寻找这些方面的东西,然后跑过这个老帖子。我知道这是一种方式,所以更多的是本质上为未来的读者填写信息,这些读者可能会在搜索档案时遇到这种情况。
我想出了另一种方法 - DUPLICATE 列(或连接列到一列),我希望通过它设置列表框的正确行,作为FIRST列,以及使其宽度为零。它不会显示,因此列表框看起来与用户不同,但标准语法为
lstBoxWhosis = "value"
然后将正常工作。