2013-11-01 1 views
0

보십시오! 오늘 끝날 때까지해야 할 일 (11/4/13) !!! 저는 하루 종일이 문제를 여러 가지 방법으로 파악하려고 노력해 왔으며, 나는 그것을 파악할 수 없습니다. 도움이 필요하다!excel vba 기준에 따라 콤보 상자 채우기

사용자가 스프레드 시트에서 데이터를 읽는 특정 기준을 선택하는 데 사용하는 일련의 userform을 가지고 있으며 최종적으로 최종 목록 userform에 정보 목록을 생성합니다. 하나의 userform (ScoreRange)에서 사용자는 두 개의 숫자를 두 개의 별도 목록 상자 (tbScore1 및 tbScore2)에 입력 한 다음 두 점수를 입력하고 "OK"레이블이 붙은 명령 단추를 클릭하면 다음 userform이 콤보 상자 (cbName), 컬럼 E의 해당 스코어가 사용자가 선택한 스코어 범위에 속하는 컬럼 A의 이름으로 채우고 싶습니다. 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