vba 무시 AutoIT 오류 처리




visual basic try catch example (2)

나는 약간의 시간이 지나면 에러를 발생시킬 코드를 가지고있다. 나는 그 에러를 처리하고 싶다. 오류가 사용자 지정 함수로 전달되는 방식도 수행됩니다.

보통 VBA에서 우리는 OnErrorGoTo Func를 사용할 것이고 우리의 일은 끝났습니다. AutoIT에서 비슷한 것을 찾을 수 없습니다.

내 코드

Func Start()

   while 1
if ProcessExists ( "Photoshop.exe" ) <> 0 Then
   Sleep(5000)
Else
 Local $sFile ="C:\Auto\CodeToBe\Batch\Image Process-50-2D v.2-" & $n & ".jsxbin"
 Local $iPID = ShellExecute($sFile)
   Sleep(10000)
   $n = $n+1
EndIf
   WEnd
EndFunc

$ n이 그 폴더에 넣은 파일의 수보다 많아지면 에러가 발생합니다.

시도했지만 작동하지 않은 몇 가지 사항 중 하나는 "도움말 섹션"및 포럼 게시물에서 가져 왔습니다.

    Global $iEventError = 0 ; To be checked to know if COM error occurs. Must be reset after handling.
    Local $oMyError = ObjEvent("AutoIt.Error", "ErrFunc") ; Install a custom error handler

    Func Start()

   while 1
      if ProcessExists ( "Photoshop.exe" ) <> 0 Then
      Sleep(5000)
      Else
      Local $sFile ="C:\Auto\CodeToBe\Batch\Image Process-50-2D v.2-" & $n & ".jsxbin"
      Local $iPID = ShellExecute($sFile)
            If $iEventError Then
            MsgBox($MB_OK, "", "There was an error on the previous line.")
            $iEventError = 0 ; Reset after displaying a COM Error occurred
            EndIf
       Sleep(10000)
      $n = $n+1
      EndIf
      WEnd
EndFunc

    ; This is my custom error handler 
    Func MyErrFunc() 
       Msgbox(0,"","ERROR GENERATED ON " & $n)
    Endfunc

내가 나에게 알려주지 않으면 내가 더 분명하게 대답하도록 질문을 편집 할 것임을 분명히했다.


오류 검사를 구현하십시오. 그렇지 않으면 FileExists ($ n을 가진 문자열) Then ... else shellexecute를 중단하십시오 ... 루프를 시작하기 전에 _FileListToArray와 같은 것을 사용할 수 있습니다. 위대한 도움말 파일의 예를 살펴보십시오.


다음은 두 가지 예입니다. 두 번째 예제를 사용하는 것이 좋습니다. 왜냐하면 처음부터 오류가 발생하는 것을 막아야하기 때문입니다. 그러나 첫 번째 예제는 대부분의 오류에 대한 일반적인 오류 검사기로 사용할 수 있습니다.

예제 1

Start()

Func Start()

    Local $n = 1
    While 1
        If ProcessExists("Photoshop.exe") <> 0 Then
            Sleep(5000)
        Else
            Local $sFile = "C:\Auto\CodeToBe\Batch\Image Process-50-2D v.2-" & $n & ".jsxbin"

            Local $iPID = ShellExecute($sFile)
            If @error Then MyErrFunc(@ScriptLineNumber, @error) ;check for error

            Sleep(10000)
            $n = $n + 1
        EndIf
    WEnd
EndFunc   ;==>Start

; error handler
Func MyErrFunc($iLineNumer, $iError)
    $iLineNumer = $iLineNumer - 1
    MsgBox(0, "", "ERROR GENERATED ON SCRIPT LINE: " & $iLineNumer & @CRLF & "ERROR CODE: " & $iError)
EndFunc   ;==>MyErrFunc

예제 2

Start2()

Func Start2()

    Local $n = 1
    While 1
        If ProcessExists("Photoshop.exe") <> 0 Then
            Sleep(5000)
        Else
            Local $sFile = "C:\Auto\CodeToBe\Batch\Image Process-50-2D v.2-" & $n & ".jsxbin"

            If FileExists($sFile) Then
                Local $iPID = ShellExecute($sFile)
                Sleep(10000)
            Else ;handle error (you could use a function here if you wanted)
                ConsoleWrite("File not found: " & $sFile & @CRLF)
            EndIf

            $n = $n + 1
        EndIf
    WEnd
EndFunc   ;==>Start2






autoit