VBA第一个数组项总是空的
下面的代码修补了我在网上find的几个例子,我不是VBA专家。
但是clist
数组中的第一个项目(以及下拉菜单中的第一个项目)总是空的,我假设它与redim
,但我无法弄清楚。
可能是什么问题?
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
这是因为你正在增加你的数组的大小,只有然后设置一个值到它的最后一个索引。
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
试试看,
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)