2015-08-10 2 views
0

Я пытаюсь удалить элемент из списка, в котором соответствуют следующие критерии. У меня есть лист под названием «Данные», у меня есть три столбца, одно - это имя пользователя, а второе - дата, а третье - статус. У меня есть данные, как показано ниже:Удалить элемент из списка, который не соответствует макросу Excel

A Column ------ B Column ------ C Column 
John  ------ 09/08/2015 ---- Publish 
Marie ------ 17/08/2015 ---- Publish 
John  ------ 08/08/2015 ---- Hold 

Я написал один код, чтобы загрузить все имена ListBox, как показано ниже

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. Но теперь моя проблема заключается в том, что у меня есть календарь, когда я выбираю данные, он должен загружать только тот элемент, который я выбрал, и статус удерживается. Поэтому из моего примера, если я выбираю «08/08/2015», он должен показывать только Джон, у меня есть ниже используется код для удаления элемента,

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 

Сво удаление всех данных, потому что Джон появился в другой день, любой другой код, который мы можем использовать?

ответ

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