VBA Excel - 如何修复列表框表单上的过滤器代码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VBA Excel - 如何修复列表框表单上的过滤器代码相关的知识,希望对你有一定的参考价值。

我想在返回搜索结果的表单的文本框中创建一个过滤器。搜索效果很好。当我在文本框中输入条目时,我的过滤器代码返回运行时错误。有人可以帮助使用过滤器代码吗?我想只过滤在文本框中输入的会计年度,即FY18。我列出了下面代码中涉及的所有元素的名称。

这是所有元素。

  1. VBA表格:“frmGLSearch”(表格名称);
  2. VBA Form TextBox:“Enter”(文本框); 3)
  3. VBA表单按钮:“搜索”(按钮);
  4. VBA Form TextBox:“Filter”(TextBox);
  5. VBA Form ListBox:“GLResult”(ListBox);
  6. 工作表:“常规搜索”(带有命名范围和动态搜索的选项卡);
  7. 工作表:“数据”(源数据);
  8. 工作表:“常规”(带搜索按钮的选项卡);
  9. 命名范围:“GeneralSearch”(带有偏移公式的常规搜索选项卡上的名称范围)

- 使用表格上的文本框过滤的VBA代码 -

Private Sub Filter_Change()

Dim i As Long
Dim arrList As Variant

Me.GLResult.Clear
If Worksheets("General Search").Range("A" & Worksheets("General Search").Rows.Count).End(xlUp).Row > 1 And Trim(Me.Filter.Value) <> vbNullString Then
    arrList = Worksheets("General Search").Range("A1:A" & Worksheets("General Search").Range("A" & Worksheets("General Search").Rows.Count).End(xlUp).Row).Value2
    For i = LBound(arrList) To UBound(arrList)
        If InStr(1, arrList(i, 1), Trim(Me.Filter.Value), vbTextCompare) Then
            Me.GLResult.AddItem arrList(i, 1)
        End If
    Next i
End If
If Me.GLResult.ListCount = 1 Then Me.GLResult.Selected(0) = True

End Sub

---额外的VBA ----

Option Explicit

Private Sub Search_Click()

Dim RowNum As Long
Dim SearchRow As Long

RowNum = 2
SearchRow = 2

Worksheets("Data").Activate

Do Until Cells(RowNum, 1).Value = ""

If InStr(1, Cells(RowNum, 2).Value, EnterGL.Value, vbTextCompare) > 0 Then
Worksheets("General Search").Cells(SearchRow, 1).Value = Cells(RowNum, 1).Value
Worksheets("General Search").Cells(SearchRow, 2).Value = Cells(RowNum, 2).Value
Worksheets("General Search").Cells(SearchRow, 3).Value = Cells(RowNum, 3).Value
Worksheets("General Search").Cells(SearchRow, 4).Value = Cells(RowNum, 4).Value
Worksheets("General Search").Cells(SearchRow, 5).Value = Cells(RowNum, 5).Value
Worksheets("General Search").Cells(SearchRow, 6).Value = Cells(RowNum, 6).Value
Worksheets("General Search").Cells(SearchRow, 7).Value = Cells(RowNum, 7).Value
SearchRow = SearchRow + 1
End If
RowNum = RowNum + 1
Loop

If SearchRow = 2 Then
MsgBox "GL not found"
Exit Sub
End If

GLResult.RowSource = "GeneralSearch"

End Sub

Private Sub UserForm_Click()

End Sub
Private Sub UserForm_Initialize()
EnterGL.SetFocus
Worksheets("General Search").Range("A2:G25000").ClearContents
End Sub
答案

由于GLResultRowSource属性填充,因此在清除之前将其重置。

GLResult.RowSource = ""
Me.GLResult.Clear

以上是关于VBA Excel - 如何修复列表框表单上的过滤器代码的主要内容,如果未能解决你的问题,请参考以下文章

VBA - Excel列表框 - 在向第二个列表框添加项目时查找重复项

vba,如何从列表框中的工作表中删除过滤后的数据

Excel VBA:无法访问表单控件?

Excel VBA 将文本框(文本和格式)复制到另一个文本框(无 ActiveX / 用户表单)

通过在列表下拉组合框中选择它来访问 VBA 代码以转到另一个表单上的特定记录

Excel vba列表框多列多行从14个文本框