VBA的第一个数组元素始终为空

3
我从网上找到了几个例子,并拼凑出下面的代码,但我不是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
2个回答

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)

如果 clist 从未增加大小,则会出现错误。 - Mojimi

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

这样你就不会给索引0设置值了。

像这样做可以解决你的问题:

if clist(Ubound(clist)) <> empty then
    ReDim Preserve clist(UBound(clist) + 1) As Variant
end if
clist(UBound(clist)) = product.Value

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接