我有一个Combobox
,我正在尝试从表的标题行传递参数。
由于某种原因,问题是我的Combobox
似乎只显示第一个结果,即使从逻辑上讲也不是。
这是我的数据,范围为
B2:J2
(因为它是动态的,所以我 无法通过Properties
在激活UserForm
时,我尝试获取表的长度(因为它是动态的,可以在激活UserForm
之前更改列的数量)
Private Sub UserForm_Activate()
Dim res As String
Dim cell As Range: Set cell = Sheets("Pomocne").Range("B2")
Dim endcell As Range
Do Until IsEmpty(cell)
Set endcell = cell
Set cell = cell.Offset(0, 1)
Loop
res = "Pomocne!B2:" & Replace(endcell.address, "$", "")
obor_combo.RowSource = res
Debug.Print res
End Sub
现在,一切似乎都运行良好,因为Debug.print res
产生以下结果:
这正是我要传递给obor_combo.RowSource = res
的内容。当我出于某些未知原因检查实际的UserForm
时,似乎只显示第一个结果。
你知道是什么原因吗?
答案 0 :(得分:1)
RowSource
适用于类似列的范围:如果您将其分配为类似行的范围,则只会得到第一个单元格
但是您可以使用List
对象的ComboBox
属性,并用转置行状范围值获得的值填充它:
Private Sub UserForm_Activate()
Dim res As String
Dim cell As Range: Set cell = Sheets("Pomocne").Range("B2")
Dim endcell As Range
Do Until IsEmpty(cell)
Set endcell = cell
Set cell = cell.Offset(0, 1)
Loop
res = "Pomocne!B2:" & Replace(endcell.Address, "$", "")
obor_combo.List = Application.Transpose(Range(res).Value)
End Sub
可以简化为:
Private Sub UserForm_Activate()
With Sheets("Pomocne")
obor_combo.List = Application.Transpose(.Range("B2", .Cells(2, .Columns.Count).End(xlToLeft)).Value)
End With
End Sub