列表框显示序列的Find方法

时间:2017-11-05 01:07:09

标签: excel excel-vba listbox vba

我正在使用以下内容在userform上填充列表框。我发现找到的第一个匹配值总是最终显示为列表框中显示的最后一个值。其他找到的值将按列表框中的查找顺序显示。如何在列表的开头显示第一个找到的值?

With Sheet8.Range("B6:B99999")
    Set rngFind = .Find(tbCustSearch.Text, LookIn:=xlValues, lookat:=xlPart)
    '   If value found then set a variable for the address
    If Not rngFind Is Nothing Then
        strFirstFind = rngFind.Address
        '   Add the values to the listbox
        Do
            If rngFind.Row > 1 Then
                lbCustSearch.AddItem rngFind.Offset(0, -1)
                lbCustSearch.List(lbCustSearch.ListCount - 1, 1) = rngFind.Value
                lbCustSearch.List(lbCustSearch.ListCount - 1, 2) = rngFind.Offset(0, 1)
                lbCustSearch.List(lbCustSearch.ListCount - 1, 3) = rngFind.Offset(0, 2)
                lbCustSearch.List(lbCustSearch.ListCount - 1, 4) = rngFind.Offset(0, 3)
                lbCustSearch.List(lbCustSearch.ListCount - 1, 5) = rngFind.Offset(0, 4)
                lbCustSearch.List(lbCustSearch.ListCount - 1, 6) = rngFind.Offset(0, 5)
                lbCustSearch.List(lbCustSearch.ListCount - 1, 7) = rngFind.Offset(0, 6)
            End If
            '   Find the next address to add
            Set rngFind = .FindNext(rngFind)
        Loop While Not rngFind Is Nothing And rngFind.Address <> strFirstFind
    End If

1 个答案:

答案 0 :(得分:1)

如果您的范围中的第一个单元格符合您的搜索条件,那么您所描述的内容通常会发生,因为Excel会在搜索区域的左上角单元格之后开始搜索。使用

Set rngFind = .Find(tbCustSearch.Text, After:=.Cells(.Rows.Count, .Columns.Count), LookIn:=xlValues, LookAt:=xlPart)

以便开始照看范围中的最后一个单元格。由于“查找”会自动换行,因此这将是您的范围左上角的单元格。