AutoFilter,为什么它始终保持第一排范围?

时间:2014-11-17 12:56:50

标签: excel vba textbox listbox autofilter

我有一个客户端数据库的动态范围名称,我使用以下代码根据我的文本框过滤它。为什么它总是显示第一个客户端,无论我在文本框中输入什么?

'Dynamic Listing - Client

Private Sub filterClientListing()
Dim rngFilter As range

'Temp String
Dim temp As String
temp = Me.txtClient.Value & "*"


'Variables Definition
Dim wsFData As Worksheet
Set wsFData = Worksheets("FilteredLists")

Dim wsData As Worksheet
Set wsData = Worksheets("Lists")

'Filter Sheet Clear
wsFData.range("A2:C1000").Clear

wsData.AutoFilterMode = False
Set rngFilter = wsData.range("ClientList")

With rngFilter
    .AutoFilter Field:=1, Criteria1:=temp
    .Copy Destination:=wsFData.range("A1").Offset(1, 0)
    .AutoFilter
End With
End Sub

1 个答案:

答案 0 :(得分:0)

我的解决方案是使用组合框。现在我唯一需要帮助的是在组合框列表中显示多行。我可以很好地搜索我的范围并在组合上显示结果,但是它可以在一行中显示,我可以按箭头向上或向下。

如何解决此1行显示?

Private Sub cboClient_Change()
Dim v As Variant
Dim i As Long
cboClient.DropDown
With Me.cboClient
    If .Value <> "" And .ListIndex = -1 Then
        v = Worksheets("Lists").range("ClientList").Value
        .Clear
        For i = LBound(v, 1) To UBound(v, 1)
            If LCase(v(i, 1)) Like LCase(.Value) & "*" Then
                .AddItem v(i, 1)
            End If
        Next i
    Else
    .List = Worksheets("Lists").range("ClientList").Value
    End If
End With
End Sub

以这种方式填充我的组合框:

Private Sub UserForm_Initialize()

With Me.cboClient
    .RowSource = ""
    .ColumnCount = 1
    .AutoWordSelect = False
    .MatchEntry = fmMatchEntryNone
    .List = Worksheets("Lists").range("ClientList").Value
End With

End Sub