VBA显式请求与string值相反的变体数​​组

我有一个combobox,我试图使用excel工作表中的范围来填充。 我提取列的最后一行,然后将该范围中的所有值添加到combobox。 问题是,如果只有一个条目,那么Excel将只从数组中提取单个值作为string,而不是变体数组。

这会导致types不匹配,因为它试图将值作为string分配给variables数组。 有没有办法显式请求一个变体数组而不是string值?

这是原始代码:

Dim hvVals() As Variant lastRow = getLastRowInCol(Sheets("MySheet"), "B") hvVals = Sheets("MySheet").Range("B2:B" & CStr(lastRow)).value If Not isEmpty(hvVals) And lastRow <> 1 Then Me.CECB.list = hvVals 

这里是我的一个解决scheme的尝试,但这确实减慢了我的代码,我不知道它是否非常健壮(另外,表中的第一行在技术上是2,这就是为什么它在if statement

 Dim hvVals() As Variant lastRow = getLastRowInCol(Sheets("MySheet"), "B") If lastRow = 2 Then ReDim hvVals(1) As Variant hvVals(0) = Sheets("MySheet").Range(hvCol & "2:" & hvCol & CStr(lastRow)).value Else hvVals = Sheets("MySheet").Range(hvCol & "2:" & hvCol & CStr(lastRow)).value End If If Not isEmpty(hvVals) And lastRow <> 1 Then Me.CECB.list = hvVals 

尝试这种方法
1.从variables声明中取出“()” – 如果它是一个你的代码逻辑应该处理的数组。
2.你不需要转换成string表中的数字Sheets("MySheet").Range("B2:B" & CStr(lastRow)).value ,我不会冒这个风险导致一个随机错误,更改Sheets("MySheet").Range("B2:B" & lastRow).value

先前“()” 在这里输入图像说明

在“()”之后 在这里输入图像说明

3.我的build议,如果你真的需要它variables – 将检查variables的Ubound,如果它大于0,这意味着多个值被发现,并做相应的处理。
4.为什么不做一个范围数组呢? 你可以玩得更容易,因为你可以通过这种方式获得“.value”属性。