将第二列添加到Excel Userform中的动态行源

时间:2018-03-12 11:30:31

标签: excel excel-vba userform vba

我尝试使用第二列填充用户表单,以使其更加用户友好。目前它显示了一个ID号,但我也希望它显示一个名称。

我在这个帖子中找到了一个答案(adding two columns to vba userform combobox),它似乎做了我想要的,但我不能完全得到与我匹配的代码,因为我使用动态引用填充组合框,而不是静态引用。

这是我尝试初始化宏:

Dim C As Range
Sheets("Consent_Outcome").Activate
Range("A2", Range("A" & Rows.Count).End(xlUp)).Name = "Dynamic"
Range("L2", Range("L" & Rows.Count).End(xlUp)).Name = "Dynamic2"
Me.cboURN.RowSource = "Dynamic"

For Each C In cboURN
Me.cboURN.Offset(1, 0) = "Dynamic2"

我希望它使用L列中的值填充组合框中的第二列,显然我应该通过将第二列值设置为ComboBox1.Column(1,{rowIndex})='值& #39;`,但我无法使用动态参考。谁能建议怎么做?

1 个答案:

答案 0 :(得分:0)

因为你已经硬编码了#A2; A2"作为范围的顶部,我认为你假设数据将始终在第二行开始。如果将范围L2分配给范围变量,则可以使用增量循环将范围变量的值分配给相应的列表值,然后.Offset(1,0)并将范围变量重新分配给增量专栏。

注意:我的代码应该与excel组合框一起使用;我不知道它是否适用于Access组合框。

假设cboURN是你的组合框:

Dim C As Range
Dim index as Integer

Sheets("Consent_Outcome").Activate
Range("A2", Range("A" & Rows.Count).End(xlUp)).Name = "Dynamic"
' Unnecessary: Range("L2", Range("L" & Rows.Count).End(xlUp)).Name = "Dynamic2"
Me.cboURN.RowSource = "Dynamic"

Set C = Range("L2")

With cboURN 'Or Me.cboURN; you can reference named controls without the preceding "Me."
    For index = 0 to .ListCount - 1
        .List(index, 1) = C 'Or C.Value2
        Set C = C.Offset(1,0)
    Next index
End With

或者,您也应该能够使用此代码填充组合框(尽管如果您需要按特定顺序添加项目,此选项可能不是最佳选择):

Dim C As Range
Dim cell As Range
Dim index as Integer

Sheets("Consent_Outcome").Activate
Set C = Range("A2", Range("A" & Rows.Count).End(xlUp))

With cboURN 'Or Me.cboURN; you can reference named controls without the preceding "Me."
    For each cell in C 
        .AddItem cell
        .List(.ListCount - 1, 1) = cell.Offset(0, 11) 'Offset 11 columns to column L
    Next cell
End With