programing

VBA Excel 단순 오류 처리

oldcodes 2023. 6. 28. 21:58
반응형

VBA Excel 단순 오류 처리

저는 가능한 한 많은 온라인을 찾아보았습니다(어떤 이유로 직장에서 차단된 Microsoft 지원 웹 사이트 제외).오류를 건너뛰려고 합니다.여기에 적힌 제 코드는 단순하지만 같은 방식으로 작동해야 합니다.

내 코드가 해야 할 일: 내 서브 중 하나가 루프에서 모양을 만들고 이름을 지정합니다(btn_1, btn_2 등).그러나 이러한 항목을 만들기 전에 중복 항목을 만들지 않도록 삭제를 시도하는 하위 항목을 호출합니다.이 하위 집합은 (btn_1, btn_2 등)을 반복하고 다음을 사용하여 도형을 삭제합니다.

for i = 1 to (a certain number)
    Set shp = f_overview.Shapes("btn_" & i)
    shp.delete
next

물론 형상이 단순히 존재하지 않기 때문에 삭제할 수 없는 경우도 발생합니다.대부분의 경우 도형이 존재하지 않는다는 오류가 발생하므로 도형을 설정하기 전에 (다음 번 오류 재개 시) 추가하는 것이 좋습니다.저는 루프 안에서, 루프 앞에서, 다음과 같이 시도했습니다.

for i = 1 to (a certain number)
    On Error Resume Next
    Set shp = f_overview.Shapes("btn_" & i)
    shp.delete
next

제가 이해하기로는 모양이 존재하지 않으면 바로 루프가 발생하지만 다음에 On error resume를 추가하든 그렇지 않든 여전히 동일한 오류가 발생합니다!내가 뭘 잘못하고 있는 거지?

편집: 도형이 존재할 때 오류가 발생하지 않습니다.

대부분의 경우 도형이 존재하지 않는다는 오류가 발생하므로 도형을 설정하기 전에 (다음 번 오류 재개 시) 추가하는 것이 좋습니다.

아니!

런타임 오류를 처리하는 권장 방법은 오류를 카펫 아래에 밀어넣지 않고 아무 일도 없었던 것처럼 실행을 계속하는 입니다. 바로 이 방법입니다.On Error Resume Next한다.

런타임 오류를 방지하는 가장 간단한 방법은 오류 상태를 확인하고 100% 실패율을 초래하는 코드를 실행하지 않는 것입니다. 예를 들어 객체 참조에서 메서드를 실행하려고 시도하는 것과 같습니다.Nothing:

For i = 1 To (a certain number)
    Set shp = f_overview.Shapes("btn_" & i)
    If Not shp Is Nothing Then shp.Delete
Next

오류 상태를 확인할 수 없고 오류를 처리해야 하는 경우 다음 방법을 사용하는 이 좋습니다.

Private Sub DoSomething()
    On Error GoTo CleanFail

    '...code...

CleanExit:
    'cleanup code here
    Exit Sub

CleanFail:
    If Err.Number = 9 Then 'subscript out of range
        Err.Clear
        Resume Next
    Else
        MsgBox Err.Description
        Resume CleanExit
    End If
End Sub

현재 수행 중인 작업과 코드에 미치는 영향을 이해하고 있다면 OERN(오류 재개 시 다음)을 사용하는 데 문제가 없습니다.

당신의 경우에는 OERN을 사용하는 것이 완벽하게 정상입니다.

Dim shp As Shape

For i = 1 To (a certain number)
    On Error Resume Next
    Set shp = f_overview.Shapes("btn_" & i)
    shp.Delete
    On Error GoTo 0
Next

동시에 다음과 같은 일을 하지 않도록 합니다.

On Error Resume Next
<Your Entire Procedure>
On Error GoTo 0

그러면 모든 오류가 표시되지 않습니다.매트에 표시된 대로 올바른 오류 처리 사용

편집:

다음은 OERN 사용 방법에 대한 또 다른 아름다운 예입니다. 이 기능은 특정 워크시트의 존재 여부를 확인합니다.

Function DoesWSExist(wsName As String) As Boolean
    Dim ws As Worksheet

    On Error Resume Next
    Set ws = ThisWorkbook.Sheets(wsName)
    On Error GoTo 0

    If Not ws Is Nothing Then DoesWSExist = True
End Function

또한 모든 시트를 루프하여 시트가 존재하는지 확인할 수 있습니다!

도형을 맹목적으로 삭제하고 오류를 건너뛰는 대신 알려진 도형 목록을 실행하여 삭제하는 것이 좋습니다.안 .On Error Resume Next학대를 당하는 경우가 많습니다.

Sub Test(TheSheet As Worksheet)

Dim Shp as Shape

For Each Shp in TheSheet.Shapes
  If left(Shp.Name, 4) = "btn_" Then
    Shp.Delete
  End if
Next

End Sub

모든 도형을 삭제하려면 다음을 제거합니다.If 하고 싶을 수정합니다.If적절한 진술

잘못된 오류 트래핑 옵션이 설정되어 있는 것 같습니다.에서 VBA 선택Tools -> Options▁the▁in▁select를 선택합니다.General tab그리고 다음을 고르세요.Break on Unhandled Errors엑셀을 제대로 할 수 입니다.On Error Resume Next지휘권

당신이 가지고 있는 것이 의심됩니다.Break on All Errors선택된.

시도:

On Error Resume Next

for i = 1 to (a certain number)
    Set shp = f_overview.Shapes("btn_" & i)
    if err<>0 then err.clear else shp.delete
next

on Error Goto 0

언급URL : https://stackoverflow.com/questions/30489035/vba-excel-simple-error-handling

반응형