从列表框中删除在Excel宏中不匹配的项目

时间:2015-08-10 02:10:01

标签: excel vba excel-vba

我正在尝试从列表框中删除项目,其中以下条件匹配。 我有一个名为“数据”的工作表,我有三列,一个是用户名,第二个是日期,第三个是状态。 我有以下数据:

ListBox2.clear
j = Sheets("Data").Range("A" & Sheets("Data").Rows.Count).End(xlUp).Row + 1
ListBox2.clear
Dim myList As Collection
Dim myRange As Range
Dim ws As Worksheet
Dim myVal As Variant
Set ws = ThisWorkbook.Sheets("Data")
Set myRange = ws.Range("A2", ws.Range("A2").End(xlDown))
Set myList = New Collection
On Error Resume Next
For Each myCell In myRange.Cells
myList.Add myCell.Value, CStr(myCell.Value)
Next myCell
On Error GoTo 0
For Each myVal In myList
ListBox2.AddItem myVal
Next myVal

我编写了一个代码来将所有名称加载到Listbox,如下所示

   For k = j To 1 Step -1
    If Format(Sheets("Data").Cells(k, "B"), "dd/mm/yyyy") <> Format(Calendar1.Value, "dd/mm/yyyy") Then
        For i = ListBox2.ListCount - 1 To 0 Step -1
            If ListBox2.List(i) = Sheets("Data").Cells(k, "A").Value Then
            ListBox2.RemoveItem i
            End If
        Next
    End If
  Next k

代码会将所有项目加载到列表框中。但现在我的问题是我有日历,当我选择数据时,它应该只加载我选择的日期和状态保持的项目,所以从我的例子如果我选择“08/08/2015”它应该只显示约翰,我有使用下面的代码删除项目,

Element.getBoundingClientRect()

它删除了所有数据,因为John出现在另一个日期,我们可以使用其他任何代码吗?

1 个答案:

答案 0 :(得分:0)

我对删除代码做了一些小修改。请尝试如下:

Dim validName As String

For k = j To 1 Step -1
    If Format(Sheets("Data").Cells(k, "B"), "dd/mm/yyyy") = Format(Calendar1.Value, "dd/mm/yyyy") Then
        validName = Sheets("Data").Cells(k, "A")
        Exit For
    End If
Next k

For i = ListBox2.ListCount - 1 To 0 Step -1
    If ListBox2.List(i) <> validName Then
        ListBox2.RemoveItem i
    End If
Next