2013-08-06 6 views
0

나는 Vlookup으로 아주 단순하게하려고하지만, 1004 오류가 발생합니다. 정말로, 정말로 당신의 도움에 감사 할 것입니다. 미리 감사드립니다. 내 코드는 다음과 같습니다.엑셀 VBA 런타임 오류 - 1004

Sub test() 
    Dim user As String 
    Dim drawn As String 
    Set Sheet = ActiveWorkbook.Sheets("consolidated") 

    For i = 2 To 2092 
     user = CStr(Cells(i, 1).Value) 
     Set Sheet = ActiveWorkbook.Sheets("sections") 
     drawn = CStr(Application.WorksheetFunction.VLookup(user, Sheet.Range("A2:B3865"), 2)) 
     Set Sheet = ActiveWorkbook.Sheets("consolidated") 
     Cells(i, 10).Value = drawn 
    Next i 
End Sub 
+0

오류 메시지가 나타 납니까? 오류가 발생한 줄은 무엇입니까? –

+0

예 - vlookup을 사용하는 회선에서 발생합니다. 때로는 객체 정의 오류 1004가 발생하고 때때로 "WorksheetFunction 클래스의 Vlookup 속성을 가져올 수 없습니다"라는 오류가 발생합니다. – user2047228

+0

"통합"의 첫 번째 사용자를 찾을 수 없기 때문에 그럴 수 있습니다. "섹션"? 뭔가 찾지 못하면 vlookup에서 오류가 발생하지 않는다고 가정했습니다. – user2047228

답변

3

VLOOKUP을 WorksheetFunction의 구성원으로 사용하면 오류로 인해 런타임 오류가 발생합니다. VLOOKUP을 응용 프로그램의 구성원으로 사용하면 오류로 인해 반환 값이 오류가 발생하며 런타임 오류가 발생할 수도 있고 그렇지 않을 수도 있습니다. 나는 왜 MS가 이렇게 설정했는지 전혀 모른다.

WorksheetFunction을 사용하는 경우 오류를 트랩해야합니다. Application을 사용하는 경우 Variant 변수를 사용하고 IsError를 테스트해야합니다. 다음은 몇 가지 예입니다.

Sub VlookupWF() 

    Dim sUser As String 
    Dim sDrawn As String 
    Dim shSec As Worksheet 
    Dim shCon As Worksheet 
    Dim i As Long 

    Set shSec = ActiveWorkbook.Worksheets("sections") 
    Set shCon = ActiveWorkbook.Worksheets("consolidated") 

    For i = 2 To 2092 
     sUser = shCon.Cells(i, 1).Value 
     'initialize sDrawn 
     sDrawn = vbNullString 

     'trap the error when using worksheetfunction 
     On Error Resume Next 
      sDrawn = Application.WorksheetFunction.VLookup(sUser, shSec.Range("A2:B3865"), 2, False) 
     On Error GoTo 0 

     'see if sdrawn is still the initialized value 
     If Len(sDrawn) = 0 Then 
      sDrawn = "Not Found" 
     End If 

     shCon.Cells(i, 10).Value = sDrawn 
    Next i 

End Sub 

Sub VlookupApp() 

    Dim sUser As String 
    Dim vDrawn As Variant 'this can be a String or an Error 
    Dim shSec As Worksheet 
    Dim shCon As Worksheet 
    Dim i As Long 

    Set shSec = ActiveWorkbook.Worksheets("sections") 
    Set shCon = ActiveWorkbook.Worksheets("consolidated") 

    For i = 2 To 2092 
     sUser = shCon.Cells(i, 1).Value 
     vDrawn = Application.VLookup(sUser, shSec.Range("A2:B3865"), 2, False) 

     'see if vDrawn is an error 
     If IsError(vDrawn) Then 
      vDrawn = "Not Found" 
     End If 

     shCon.Cells(i, 10).Value = vDrawn 
    Next i 

End Sub 
+0

정말 고마워요! – user2047228