2013-11-01 2 views
0

ПОЖАЛУЙСТА, ПОМОГАЙТЕСЬ! Мне нужно это сделать к концу дня СЕГОДНЯ (11/4/13) !!! Я пытался выяснить эту проблему по-разному в течение всего дня, и я не могу понять это. Нужна помощь!Сопоставьте поле со списком на основе критериев с excel vba

У меня есть серия пользовательских форм, которые пользователь использует для выбора определенных критериев, которые считывают данные из электронной таблицы, чтобы в конечном итоге создать список информации в конечной пользовательской форме списка. В одной пользовательской форме (ScoreRange) пользователю предлагается ввести два числа в два отдельных списка (tbScore1 и tbScore2), а затем, как только они войдут в два счета и нажмите кнопку с символом «ОК», следующая пользовательская форма открывается с помощью combobox (cbName), в котором я хотел бы, чтобы он был заполнен именами из столбца A, соответствующий балл в столбце E попадает в выбранный диапазон баллов пользователя. Я хочу, чтобы он выполнял этот цикл поиска по строкам 2-401. В настоящее время поле со списком пустое, когда оно открыто; он не заполняется правильно. Вот текущий код, который у меня есть. Следует отметить, что пользовательская форма ScoreRange по-прежнему открыта (она еще не была выгружена).

Private Sub UserForm_Activate() 
    Dim i as Long 
    For i = 2 To 401 
    If Range("E" & i).Value >= ScoreRange.tbScore1.Value And Range("E" & i).Value <= ScoreRange.tbScore2.Value Then 
    Me.cbName.AddItem Range("A" & i).Value 
    End if 
    Next i 
     End Sub 
+1

Выньте 'On Error Resume Next', и я подозреваю, что вы сразу обнаружите свою ошибку (также добавьте' Option Explicit' в начало вашего модуля). – enderland

+0

Я удалил «On Error Resume Next», и при запуске кода ошибок нет, но поле со списком пусто. Итак, это не решает мою проблему. Любые другие идеи? – Ryan

ответ

1

Ничего, все. Наконец я решил, что единственный эффективный способ сделать это - использовать автофильтры. Вот последний код, который я использовал, для тех, кто заинтересован.

 Private Sub UserForm_Activate() 
     Dim wksheet1 As Worksheet 
     Set wksheet1 = Sheets("Sheet1") 
     Dim LR As Long 
     LR = Range("A" & Rows.Count).End(xlUp).Row 
     Dim cbRange As Range 

    ActiveSheet.ListObjects("Table2").Range.AutoFilter Field:=5, Criteria1:= _ 
    ">=" & tbScore1.Value, Operator:=xlAnd, Criteria2:="<=" & tbScore2.ValueActiveSheet.ListObjects("Table2").Range.AutoFilter Field:=5, Criteria1:= _ 
    ">=" & tbScore1.Value, Operator:=xlAnd, Criteria2:="<=" & tbScore2.Value 

     For Each cbRange In Range("A2:A" & LR).SpecialCells(xlCellTypeVisible) 
     Me.cbName.AddItem cbRange.Value 
      Next cbRange 

    ActiveSheet.AutoFilterMode = False 
    ActiveSheet.ShowAllData 


     End Sub 
Смежные вопросы