programing

워크시트 기능과 함께 1004 오류를 처리하는 방법.V 룩업?

instargram 2023. 7. 16. 12:31
반응형

워크시트 기능과 함께 1004 오류를 처리하는 방법.V 룩업?

다음 코드가 있습니다.

Dim wsFunc As WorksheetFunction: Set wsFunc = Application.WorksheetFunction
Dim ws As Worksheet: Set ws = Sheets("2012")
Dim rngLook As Range: Set rngLook = ws.Range("A:M")

'within a loop
  currName = "Example"
  cellNum = wsFunc.VLookup(currName, rngLook, 13, False)

V 룩업이 항상 결과를 찾을 것으로 예상되지는 않지만, 결과를 찾지 못하면 다음 줄에서 오류를 확인하기도 전에 라인이 오류를 범합니다.

오류:

런타임 오류 '1004':워크시트 함수 클래스의 Vlookup 속성을 가져올 수 없습니다.

결과가 발견되면 잘 작동합니다.여기서 오류를 처리하는 좋은 방법은 무엇입니까?

대신에WorksheetFunction.Vlookup사용할 수 있습니다.Application.Vlookup설정하는 경우Variant이 값과 같다면 일치하는 항목이 없으면 오류 2042를 반환합니다.그런 다음 변형 모델을 테스트할 수 있습니다.cellNum이 경우 - 와 함께IsError:

Sub test()
Dim ws As Worksheet: Set ws = Sheets("2012")
Dim rngLook As Range: Set rngLook = ws.Range("A:M")
Dim currName As String
Dim cellNum As Variant

'within a loop
currName = "Example"
cellNum = Application.VLookup(currName, rngLook, 13, False)
If IsError(cellNum) Then
    MsgBox "no match"
Else
    MsgBox cellNum
End If
End Sub

Application의 버전VLOOKUP그리고.MATCH함수를 사용하면 오류를 발생시키지 않고 오류를 테스트할 수 있습니다.를 사용하는 경우WorksheetFunction버전, 당신은 당신의 코드를 오류 핸들러에 다시 적용하고, 평가하기 위해 다음 문장으로 돌아가는 복잡한 오류 처리가 필요합니다.와 함께Application기능, 당신은 그 혼란을 피할 수 있습니다.

위의 내용은 다음을 사용하여 더욱 단순화할 수 있습니다.IIF기능.이 방법이 항상 적절한 것은 아닙니다(예: 다음을 기준으로 더 많은/다른 절차를 수행해야 하는 경우).If/Then하지만 단순히 MsgBox에 표시할 프롬프트를 결정하려는 경우에는 다음과 같이 작동해야 합니다.

cellNum = Application.VLookup(currName, rngLook, 13, False)
MsgBox IIF(IsError(cellNum),"no match", cellNum)

대신 이러한 방법을 고려합니다. On Error ...진술들.그것들은 읽기도 쉽고 유지하기도 쉽습니다. 많은 것들을 따르려고 노력하는 것보다 더 혼란스러운 것은 없습니다.GoTo그리고.Resume진술들.

코드 내부의 오류를 건너뛰고 루프를 계속 진행하는 방법이 있습니다. 도움이 되기를 바랍니다.

Sub new1()

Dim wsFunc As WorksheetFunction: Set wsFunc = Application.WorksheetFunction
Dim ws As Worksheet: Set ws = Sheets(1)
Dim rngLook As Range: Set rngLook = ws.Range("A:M")

currName = "Example"
On Error Resume Next ''if error, the code will go on anyway
cellNum = wsFunc.VLookup(currName, rngLook, 13, 0)

If Err.Number <> 0 Then
''error appeared
    MsgBox "currName not found" ''optional, no need to do anything
End If

On Error GoTo 0 ''no error, coming back to default conditions

End Sub

저의 제한된 경험으로 볼 때, 이러한 일은 두 가지 주요 이유로 발생합니다.

  1. lookup_value(arg1)가 table_array(arg2)에 없습니다.

여기서 간단한 해결책은 다음으로 끝나는 오류 처리기를 사용하는 것입니다.Resume Next

  1. arg1 및 arg2의 형식이 올바르게 해석되지 않습니다.

만약 당신이lookup_value이 변수를 포함할 수 있습니다.TRIM()

cellNum = wsFunc.V 룩업(TRIM(currName), rngLook, 13, False)

언급URL : https://stackoverflow.com/questions/18063214/how-to-error-handle-1004-error-with-worksheetfunction-vlookup

반응형