下面的代码我在网上找到的几个例子中修改过,我不是VBA专家。
但clist
数组中的第一项(以及下拉列表中的第一项)始终为空,我假设它与redim
s有关,但我无法弄清楚。
可能是什么问题?
Private Sub ComboBox1_Change()
ReDim clist(0)
'If any value is input
If ComboBox1.Value <> "" Then
Dim kword As Variant
Dim product As Variant
'For each product description in our sheet table
For Each product In [Produtos[Descrição]].Rows
'Keyword search
For Each kword In Split(ComboBox1.Value, " ")
If InStr(Replace(product.Value, "", " "), kword) And kword <> "" Then
'Issue most likely here
ReDim Preserve clist(UBound(clist) + 1) As Variant
clist(UBound(clist)) = product.Value
Exit For
End If
Next kword
Next product
ComboBox1.list = clist
'If found something
If UBound(clist) > 0 Then
ComboBox1.DropDown
End If
'If no Input just show all products, here it doesn't show a blank item
Else
ComboBox1.list = [Produtos[Descrição]].Value2
End If
End Sub
答案 0 :(得分:4)
试一试,
ReDim clist(0)
For Each product In [Produtos[Descrição]].Rows
'Keyword search
For Each kword In Split(ComboBox1.Value, " ")
If InStr(Replace(product.Value, "", " "), kword) And kword <> "" Then
'Issue most likely here
clist(UBound(clist)) = product.Value
ReDim Preserve clist(UBound(clist) + 1)
Exit For
End If
Next kword
Next product
ReDim Preserve clist(UBound(clist) - 1)
答案 1 :(得分:2)
这是因为你增加了数组的大小,然后才将值设置为它的最后一个索引。
ReDim Preserve clist(UBound(clist) + 1) As Variant 'Increase array size by 1
clist(UBound(clist)) = product.Value 'Set a value to the higher index
这样您就不会为index 0
这样的事情可以解决你的问题:
if clist(Ubound(clist)) <> empty then
ReDim Preserve clist(UBound(clist) + 1) As Variant
end if
clist(UBound(clist)) = product.Value