VBA Excel使用动态大小添加范围到组合框列表

时间:2016-08-19 19:00:42

标签: excel vba excel-vba combobox

我在工作簿中有一个范围,我想从我的一个Userform设置到Combobox中的项目列表。问题是Range可以是任何大小。我目前通过退出Sub来处理零案例,但是当该范围内只有一个元素时。

如果有一个元素,而不是返回一个元素数组,它只会返回一个String元素,而列表框会给我一个错误: `运行时错误'':无法设置List属性。无效的属性数组索引'。除了为只有一个元素的情况创建例外之外,还有处理这个吗?

这里是代码: 编辑:修正程序以准确表示问题。

Private Sub UserForm_Activate()
    Dim formList As Variant
    Dim lastRow As Long
    lastRow = getLastRowInCol(Sheets("HiddenVariables"), "B")
    If lastRow = 0 Or lastRow = 1 Then Exit Sub 
    formList = Sheets("HiddenVariables").Range("B2:B" & lastRow).value 'If lastRow =2 then run-time error 381 is thrown
    Me.ComboBox.list = formList
End Sub

Same issue with solution

1 个答案:

答案 0 :(得分:1)

一种方法是使用命名范围和组合框的RowSource属性。

定义命名范围:

enter image description here

然后只需设置rowsource

Option Explicit

Private Sub UserForm_Activate()
    Me.ComboBox1.RowSource = "Sheet1!Combo_Source"
End Sub

按照你的方法,使用它:

If IsArray(formList) Then
        Me.ComboBox1.List = formList
     Else
        Me.ComboBox1.List = Split(formList, "") '/Converts str to arr on the fly.
   End If