VBA Excel添加动态大小的范围到组合框列表
问题描述:
我有一个工作簿内的范围,我想从我的一个用户窗体设置到组合框中的项目列表。问题是Range可以是任何大小。我目前通过退出Sub
来处理零案例,但是当范围中只有一个元素时。VBA Excel添加动态大小的范围到组合框列表
当有一个元素而不是返回一个元素数组时,它只返回一个String
元素,并且列表框给我一个错误: `运行时错误'381':无法设置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
答
一种方法是使用命名范围和组合框的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
+1
除非我错了,我想你也可以使用'Me.ComboBox1.RowSource =“Sheet1!B2:B”&lastRow'。这实际上完全解决了我的问题。谢谢,我一直在为此苦苦挣扎太久。 – RWA4ARC
比较运营商是一个' ='在VBA中,不是双'=='。 False也被认为是零,所以'如果不是CBool(lastRow)Then Exit Sub'也是合适的。 – Jeeped
对,修正了这个问题。谢谢 – RWA4ARC
您可以尝试在Me.ComboBox.list = formList之前插入'If Not IsArray(formList)then formList = Array(formList)'。 – Jeeped