我尝试使用第二列填充用户表单,以使其更加用户友好。目前它显示了一个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;`,但我无法使用动态参考。谁能建议怎么做?
答案 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