为什么我的ComboBox只显示第一个结果?

时间:2019-03-09 17:01:37

标签: excel vba combobox

我有一个Combobox,我正在尝试从表的标题行传递参数。

由于某种原因,问题是我的Combobox似乎只显示第一个结果,即使从逻辑上讲也不是。

  

这是我的数据,范围为B2:J2(因为它是动态的,所以我   无法通过Properties

     

enter image description here

在激活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产生以下结果:

enter image description here

这正是我要传递给obor_combo.RowSource = res的内容。当我出于某些未知原因检查实际的UserForm时,似乎只显示第一个结果。

你知道是什么原因吗?

enter image description here

1 个答案:

答案 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