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)