워크시트 기능과 함께 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
저의 제한된 경험으로 볼 때, 이러한 일은 두 가지 주요 이유로 발생합니다.
- lookup_value(arg1)가 table_array(arg2)에 없습니다.
여기서 간단한 해결책은 다음으로 끝나는 오류 처리기를 사용하는 것입니다.Resume Next
- 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
'programing' 카테고리의 다른 글
postgresql의 권고 잠금 시간 초과 (0) | 2023.07.21 |
---|---|
es6 스타일 가져오기를 사용하여 MongoDB를 가져오는 방법은 무엇입니까? (0) | 2023.07.16 |
문자열을 정의할 수 있습니까?TypeScript에서 비어 있습니까? (0) | 2023.07.16 |
Excel 테이블(VBA)에 새 행 추가 (0) | 2023.07.16 |
Matplotlib에게 두 번째(새) 그림을 만든 다음 나중에 이전 그림에 그림을 그리도록 지시하려면 어떻게 해야 합니까? (0) | 2023.07.16 |