【发布时间】:2017-07-26 19:49:28
【问题描述】:
我在 excel (vba) 中使用了一个 ComboBox,它根据输入的内容(接近匹配)将项目添加到列表中,这样如果他们输入的内容已经存在于数据范围中,他们可以看到并单击。
除了应该显示列表的 ComboBox1.DropDown 方法之外,这一切正常。不幸的是,它只显示一个带有滚动按钮的项目。单击下拉按钮或按 f4 会显示由框的属性确定的正确行数。
我已经搜索和搜索了,有什么线索可以自动显示列表中的所有项目吗?
这是我关于 SO 的第一个问题,如果标记不正确,请告知。
编辑:ActiveX 控件、.listRows 和 .listFillRange 似乎没有帮助
【问题讨论】:
-
ComboBox1.DropDown在哪里被调用 -ComboBox1_Change()?是ComboBox1.MatchEntry = 1(fmMatchEntryComplete)吗?这是一个 UserForm 而不是 ActiveX 对吗? -
是的 .DropDown 由 ComboBox_Change() 调用,但在它自己的 Sub 中专门用于构建列表。 .MatchEntry 设置为 none,我遇到了问题,因为这些行: s = ComboBox1.Value ComboBox1.clear ComboBox1.Value = s 在清除列表时,还将框的值设置为第一个匹配值。我确实应该提到它是一个 ActiveX 控件,我会尝试一个用户表单,看看它是否有不同的行为。
-
仍然需要学习如何在 SO 上格式化文本,我会查看文档以便将代码和 cmets 分开。
-
最简单的方法是在此处选择要粘贴的代码,按 Tab,复制,然后粘贴到您的编辑框中。为什么需要在文本更改时重建列表?是不是因为想要的值可能不是用户输入的第一个词?
-
是的,用户需要知道是否已经输入,因此在输入 4 个左右的字母后,应该会出现一个下拉列表,其中包含现有名称,其中包括(或接近于)什么他们进入了。现有名称可能与他们预期的不同。它很重要,因为会为条目生成交叉引用编号,并且它基于输入是否已经存在。