如何用来自两个不同列的数据填充组合框下拉列表?

时间:2018-07-31 02:40:10

标签: vba combobox multiple-columns userform

我正在努力用VBA构建我的第一个有用的文档,并且大部分时间我都可以插上电源,直到获得想要的功能为止,但是我遇到了麻烦。

我想在UserForm中的ComboBox行项目中添加一个包含“ B”列中的信息和“ i”列中的信息的表。

基本上,“ B”列包含任务,而“ i”列包含截止日期。当用户打开我的组合框的下拉菜单时,我希望每行显示任务名称和截止日期,这样重复的任务就不会引起混淆。

我已经尝试了六种方法,但是我看到了一个又一个错误。

我怀疑我需要构建一个数组,一个listobject或其他东西,但是当我尝试这样做时,所有东西仍然坏了。

这是我第一次尝试的非功能性潜艇。有人可以告诉我该怎么做吗?

let color = {
     r: 255,
     g: 255,
     b: 0,
}

<div style={color}>asdf</div>

1 个答案:

答案 0 :(得分:1)

NumElements = range(range("b8"), range("b8").End(xlDown)).Rows.Count为您提供该列中的元素数量,从B8开始直到第一个空单元格上方。

对于下拉菜单,您可以选择单列组合框或多(2)列组合框。我建议使用2列版本,它并不比单列复杂得多。您可以分两步填充combox:将值填充到数组中,然后将数组加载到组合框中。 (您选择的解决方案也不错,但是我更喜欢这种方式,因为它更易于调试。)

2列版本:

Dim arr(), i As Long
Redim arr(1 to NumElements,1 to 2)

For i=1 to NumElements
     arr(i,1)=cells(7+i,2)     ' column B
     arr(i,2)=cells(7+i,9)     ' column I
Next 
Me.Combo_Task_Select = arr

完成。请记住在表单设计器中设置列数属性。或者,您可以使用Me.Combo_Task_Select.ColumnCount=2

动态设置

单列版本:您需要从2个单元格中生成一个字符串值,如下所示:

Redim arr(1 to NumElements)
For i=1 to NumElements
    arr(i)=Left(cells(7+i,2) & worksheetFunction.rept(" ",10), 10) & cstr(cells(7+i,9))
next

根据任务的最大长度调整“ 10”。