Mac용 Excel 에서 응용 프로그램 위한 Visual Basic 함께 오류 트래핑

기술 자료 번역 기술 자료 번역
기술 자료: 193247 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

이 페이지에서

요약

사용하는 Microsoft VBA 매크로를 런타임 오류가 발생할 때 오류 메시지가 화면에 나타납니다 및 매크로를 중단합니다 또는 예기치 못한 방식으로 동작합니다.

응용 프로그램 충돌 또는 예기치 못한 방식으로 동작하지 않도록 하려면 오류를 차단하고 매크로 처리할 방법을 알려 주는 매크로 코드를 포함할 수 있습니다. 가로채고 런타임 오류 처리 과정은 "오류 트래핑." 라고 응용 프로그램 오류를 처리하는 방법을 알려 주는 명령 집합은 "오류 처리 루틴을" 또는 "오류 처리기" 라고

추가 정보

Microsoft는 묵시적인 보증 없이 목적으로만 프로그래밍 예제를 제공합니다. 이 포함되지만, 상품성 또는 특정 목적에의 적합성에 대한 묵시적인된 보증이 제한되지 않습니다. 이 문서에서는 만들려면 및 프로시저를 디버깅하는 데 사용되는 도구 및 여기서 설명하는 프로그래밍 언어에 익숙한 사용자를 대상으로 합니다. Microsoft 지원 엔지니어는 사용자에게 도움이 되도록 특정 절차에 대한 기능을 설명할 수 있지만 추가 기능을 제공하거나 특정 요구 사항에 맞도록 프로시저를 구성하지는 이 예제를 수정하지 않습니다. Visual Basic 코드가 실행되는 동안 여러 유형의 트랩할 수 있는 오류 발생할 수 있습니다. 오류 트래핑 Microsoft Excel에서 Mac용 다음 함수 및 문을 사용하여 이용할 수 있습니다.

오류 보호

On Error 문을 VBA 시작 또는 중지 오류 트래핑 발생합니다. 또한 On Error 문은 오류가 발생할 경우 실행할 문의 집합을 지정합니다.

함수 오류

Err 함수를 발생한 오류 수를 반환합니다.

Err 함수 사용하는 예:
   Msgbox "The most recent error number is " & Err & _
      ". Its message text is: " & Error(Err)
				
다음 테이블은 Err 함수를 사용할 때 발생할 수 있는 트래핑 가능한 오류 코드 목록이 포함됩니다.
   Error code   Error message
   ----------   -------------
   3            Return without GoSub
   5            Invalid procedure call
   6            Overflow
   7            Out of memory
   9            Subscript out of range
   10           This array is fixed or temporarily locked
   11           Division by zero
   13           Type mismatch
   14           Out of string space
   16           Expression too complex
   17           Can't perform requested operation
   18           User interrupt occurred
   20           Resume without error
   28           Out of stack space
   35           Sub, function, or property not defined
   47           Too many DLL application clients
   48           Error in loading DLL
   49           Bad DLL calling convention
   51           Internal error
   52           Bad file name or number
   53           File not found
   54           Bad file mode
   55           File already open
   57           Device I/O error
   58           File already exists
   59           Bad record length
   61           Disk full
   62           Input past end of line
   63           Bad record number
   67           Too many files
   68           Device unavailable
   70           Permission denied
   71           Disk not ready
   74           Can't rename with different drive
   75           Path/File access error
   76           Path not found
   91           Object variable or With block variable not set
   92           For Loop not initialized
   93           Invalid pattern string
   94           Invalid use of Null
   298          System DLL could not be loaded
   320          Can't use character device names in specified file names
   321          Invalid file format
   322          Can't create necessary temporary file
   325          Invalid format in resource file
   327          Data value named was not found
   328          Illegal parameter; can't write arrays
   335          Could not access system registry
   336          ActiveX component not correctly registered
   337          ActiveX component not found
   338          ActiveX component did not correctly run
   360          Object already loaded
   361          Can't load or unload this object
   363          Specified ActiveX control not found
   364          Object was unloaded
   365          Unable to unload within this context
   368          The specified file is out of date. This program requires
                a newer version
   371          The specified object can't be used as an owner form for
                Show
   380          Invalid property value
   381          Invalid property-array index
   382          Property Set can't be executed at run time
   383          Property Set can't be used with a read-only property
   385          Need property-array index
   387          Property Set not permitted
   393          Property Get can't be executed at run time
   394          Property Get can't be executed on write-only property
   400          Form already displayed; can't show modally
   402          Code must close topmost modal form first
   419          Permission to use object denied
   422          Property not found
   423          Property or method not found
   424          Object required
   425          Invalid object use
   429          ActiveX component can't create object or return
                reference to this object
   430          Class doesn't support OLE Automation
   430          Class doesn't support Automation
   432          File name or class name not found during Automation
                operation
   438          Object doesn't support this property or method
   440          OLE Automation error
   440          Automation error
   442          Connection to type library or object library for remote
                process has been lost
   443          Automation object doesn't have a default value
   445          Object doesn't support this action
   446          Object doesn't support named arguments
   447          Object doesn't support current locale settings
   448          Named argument not found
   449          Argument not optional or invalid property assignment
   450          Wrong number of arguments or invalid property assignment
   451          Object not a collection
   452          Invalid ordinal
   453          Specified DLL function not found
   454          Code resource not found
   455          Code resource lock error
   457          This key is already associated with an element of this
                collection
   458          Variable uses a type not supported in Visual Basic
   459          This component doesn't support events
   460          Invalid Cipboard format
   461          Specified format doesn't match format of data
   480          Can't create AutoRedraw image
   481          Invalid picture
   482          Printer error
   483          Printer driver does not support specified property
   484          Problem getting printer information from the system.
                Make sure the printer is set up correctly
   485          Invalid picture type
   486          Can't print form image to this type of printer
   735          Can't save file to Temp directory
   744          Search text not found
   746          Replacements too long
   31001        Out of memory
   31004        No object
   31018        Class is not set
   31027        Unable to activate object
   31032        Unable to create embedded object
   31036        Error saving to file
   31037        Error loading from file
				

오류 함수

오류 함수 지정된 오류 번호에 해당하는 오류 메시지를 반환합니다.

오류 함수 사용하는 예:
   Msgbox "The message text of the error is: " & Error(Err)
				

오류 설명

Error 문은 오류가 발견되는 Err 함수는 사용자 지정 오류 번호를 할당할 수 있으므로 시뮬레이션합니다. 이러한 사용자 정의 오류 값은 위한 절차를 정의하고 항상 Variant 데이터 형식의 변수에 저장되는 값은 있습니다. 일반적으로 이러한 유형의 오류 값이 여러 개의 인수를 받아 값을 반환하는 프로시저 사용됩니다. 예를 들어, 경우에만 인수는 특정 범위에 속하는 경우 반환 값은 유효하지 가정하십시오. 프로시저를 사용자가 제공하는 인수를 테스트하고 인수를 허용 가능한 범위 내에 있지 않은 경우에는 프로시저의 반환 적절한 오류 값을 가질 수 있습니다.

Variant 데이터 형식의 하위 형식 오류입니다 및 "오류 값" 이라는 용어는 사용되는 있으면 일반적으로 변수를 Variant 형식의 및 사용자 정의 오류로 VBA 인식하는 값을 포함하는 의미입니다. 오류 값은 프로시저에서 오류 조건이 발생한 나타내는 데 사용됩니다. 일반 변수 및 오류가 없는 것으로 인식되기 때문에 일반적인 런타임 오류와 달리 이러한 오류 코드에 끊지. 프로시저를 이러한 오류 값을 테스트하고 적절한 조치를 취할 수 있습니다.

Error 문은 런타임 오류를 시뮬레이트할 수 있습니다. 이 응용 프로그램을 테스트할 때 또는 특정 조건을 런타임 오류 동등한 것으로 취급해야 할 때 특히 유용합니다. Error 문은 오류 오류 코드를 제공하여 응용 프로그램 런타임 오류 모든 VBA 시뮬레이션된 수 있습니다. Error 문을 응용 프로그램 런타임 오류 VBA 대응하지 않는 오류 코드를 제공하여 사용자 고유의 사용자 정의 오류를 만들 수도 있습니다. 이 문서의 앞부분에 함수 오류 섹션) 에서 기본 제공 오류 목록을 포함하는 테이블이 나타납니다. 이 때 VBA 사용 가능한 숫자 모든 기본 제공 오류 사용하지 않습니다. 향후 VBA 릴리스, 내부 숫자를 더 빌드된 - 오류가 추가되는 증가합니다. 오류 번호는 50,000 시 시작 65,535 개까지 앞으로 충돌을 방지하기 위해 진행하는 것이 좋습니다.

예제 사용하여 오류 보호 시뮬레이션 런타임 오류 수:
   Sub Test()

      On Error Resume Next
      Error 50000          'set the value of Err to 50000

      If Err = 50000 Then
         MsgBox "my own error occurred"
      End If

   End Sub
				
때 다음 테스트 매크로를 실행, 같이 메시지가 "직접 오류가 발생했습니다" 들어 있는 메시지 상자가 나타납니다.

CVErr 함수

CVErr 함수는 오류 값을 만드는 데 사용됩니다. CVErr 함수를 합니다 또는 정수여야 정수를 포함하는 변수가 될 인수를 사용합니다.
   NoRadius = CVErr(2010)

   NotANumber = 2020
   InvalidArgument = CVErr(NotANumber)
				
CVErr 함수를 사용하는 예:
   Public NoRadius, NotANumber

   Sub AreaOfCircle()
      Const PI = 3.142
      NoRadius = CVErr(2010)
      NotANumber = CVErr(2020)
      Radius = CheckData(InputBox("Enter the radius: "))
      If IsError(Radius) Then
         Select Case Radius
            Case NoRadius
               MsgBox "Error: No radius given."
            Case NotANumber
               MsgBox "Error: Radius is not a number."
            Case Else
               MsgBox "Unknown Error."
         End Select
      Else
         MsgBox "The area of the circle is " & (PI * Radius ^ 2)
      End If
   End Sub

   Function CheckData(TheRadius)
      If Not IsNumeric(TheRadius) Then
         CheckData = NotANumber
      ElseIf TheRadius = 0 Then
         CheckData = NoRadius
      Else
         CheckData = TheRadius
      End If
   End Function
				

기본 오류 값 사용

가지 7개의 기본 제공 오류 값이 Mac. Excel 아래의 표는 오류 번호 (상수, 리터럴 오류 값 및 변환된 오류 값을 보여 줍니다.
Error number (Constant)   Literal error value     Converted error value

xlErrDiv0                   [#DIV/0!]               CVErr(xlErrDiv0)
xlErrNA                     [#N/A]                  CVErr(xlErrNA)
xlErrName                   [#NAME?]                CVErr(xlErrName)
xlErrNull                   [#NULL!]                CVErr(xlErrNull)
xlErrNum                    [#NUM!]                 CVErr(xlErrNum)
xlErrRef                    [#REF!]                 CVErr(xlErrRef)
xlErrValue                  [#VALUE!]
CVErr(xlErrValue)
				
사용자 정의 오류를--숫자로 함께 작업하는 것과 같은 방법으로 CVErr 함수를 사용하여 오류 값으로 변환할 이러한 기본 제공 워크시트 오류 값을 작업할. 유일한 차이점은 워크시트 오류에 대한 것으로, VBA 기본 제공 상수로 오류 번호를 제공하며 리터럴 오류 값을 제공합니다. 이러한 항목에 대한 사용자 정의 오류 값이 제공되지 않습니다. 리터럴 오류 값 위의 표와 같이 대괄호로 묶어야 합니다.

기본 오류 값 사용하는 예:
   Function Commission(SharesSold,PricePerShare)
      If Not (IsNumeric(SharesSold) And IsNumeric(PricePerShare)) Then
         Commission = CVErr(xlErrNum)
      Else
         TotalSalePrice = ShareSold * PricePerShare
         If TotalSalePrice <= 15000 Then
            Commission = 25 + 0.03 * SharesSold
         Else
            Commission = 25 + 0.03 * (0.9 * SharesSold)
         End If
      End If
   End Function
				

오류 코드 처리 중앙 집중화

응용 프로그램 매크로는 VBA 오류 처리 코드를 추가할 때 같은 오류가 반복해서 처리 중인 알 수 있습니다. 코드 및 오류 처리 코드가 일반적인 오류 상황을 처리하기 위해 호출할 수 있는 몇 가지 프로시저를 작성하여 코드를 작성하는 데 필요한 노력을 크기를 줄일 수 있습니다.

다음, 발생한 오류 해당하는 메시지를 표시하는 함수 프로시저를 예입니다 및 가능한 경우, 사용자가 특정 단추를 선택하여 다음 수행할 작업을 지정할 수 있습니다. 그런 다음 호출한 프로시저로 코드 번호를 반환합니다.
   Public Const RESUME_STATEMENT = 0   'Resume
   Public Const RESUME_NEXT = 1        'Resume Next
   Public Const UNRECOVERABLE = 2      'Unrecoverable error
   Public Const UNRECOGNIZED = 3       'Unrecognized error
   Public Const ERR_DEVICEUNAVAILABLE = 68
   Public Const ERR_BADFILENAMEORNUMBER = 52
   Public Const ERR_PATHDOESNOTEXIST = 76
   Public Const ERR_BADFILEMODE = 54

   Function FileErrors(errVal As Integer) As Integer
   Dim MsgType As Integer, Msg As String, Response As Integer
      MsgType = vbExalamation
      Select Case errVal
         Case ERR_DEVICEUNAVAILABLE     'Error #68
            Msg = "That device is unavailable."
            MsgType = MsgType + vbAbortRetryIgnore
         Case BADFILENAMEORNUMBER      'Errors #64 & 52
            Msg = "That filename is not valid."
            MsgType = MsgType + vbOKCancel
         Case PATHDOESNOTEXIST      'Error #76
            Msg = "That path does not exist."
            MsgType = MsgType + vbOKCancel
         Case BADFILEMODE      'Error #54
            Msg = "Can not open the file for that type of access."
            MsgType = MsgType + vbOKCancel
         Case Else
            FileErrors = UNRECOGNIZED
            Exit Function
      End Select
      Response = MsgBox(Msg, MsgType, "Disk Error")
      Select Case Response
         Case vbOK, vbRetry
            FileErrors = RESUME_STATEMENT
         Case vbIgnore
            FileErrors = RESUME_NEXT
         Case vbCancel, vbAbort
            FileErrors = UNRECOVERABLE
         Case Else
            FileErrors = UNRECOGNIZED
      End Select
   End Function
				

사용자 처리 인터럽트

사용자가 응용 프로그램 프로시저 VBA COMMAND + 마침표를 눌러 중단할 수 있습니다. 완성된 응용 프로그램에서 프로시저에 대한 인터럽트를 사용하지 않도록 가능합니다. 그러나 완성된 프로시저에서 사용자 인터럽트를 사용하지 않으면 있는지 파일을 닫고, 공유 리소스에서 연결 끊기 또는 수정된 변수는 사용자가 응용 프로그램의 컨트롤을 반환하기 전에 복원해야 수 있도록 인터럽트 발생한 경우 프로시저를 알림을 만들 수 있습니다.

xlErrorHandlerEnableCancelKey 속성을 설정하여 해당 프로시저를 사용자 인터럽트를 트래핑할 수 있습니다. 이 속성을 설정하면 런타임 On Error 문을 사용하여 포착할 오류 번호는 18, 모든 인터럽트를 생성합니다. 프로시저가 중지 및 프로그램을 끝내려면 오류를 처리할 수 있습니다. Resume 문은 프로시저 트래핑된 런타임 오류가 발생한 후 계속하려면 사용되면 인터럽트가 무시됩니다.

xlDisabledEnableCancelKey 속성을 설정하여 사용자가 인터럽트를 완전히 무시할 수 있습니다. 이 상태는 모든 시도를 사용자가 실행 중인 프로시저에 인터럽트 Mac용 Excel이 무시합니다. 처리 기본 인터럽트 복원할 수 xlInterruptEnableCancelKey 속성 설정을 변경하십시오. 프로시저 실행이 완료될 때마다 프로시저를 영구적으로 사용자 인터럽트를 사용하지 못하도록 설정하는 것을 방지할 수 Mac용 Excel 항상 EnableCancelKey 속성의 기본 설정을 위해 xlInterrupt 복원합니다. 코드 내에서 인터럽트가 올바르게 처리되도록 하려면 합니다 명시적으로 사용하지 않거나 프로시저가 실행될 때마다 인터럽트를 트래핑합니다. 전용이어야 합니다 각 프로시저에 대해 해당 하나만 인터럽트 처리기를 사용할 수 및 해당 프로시저에 의해 발생한 모든 런타임 오류에 대해 동일한 처리기가 사용됩니다.

다음 예제에서는 많은 기간 동안 완료하는 데 필요한 절차를 보여 줍니다. 사용자가 프로시저를 인터럽트가 경우 오류를 트래핑하여. 먼저 사용자 인터럽트 프로시저가 실제로 중단되었습니다 및 다음 절차를 순서대로 방식으로 종료됩니다 확인합니다.
   Sub ProcessData()
      'Set up a user interrupt trapping as a run-time error
      On Error GoTo UserInterrupt
      Application.EnableCancelKey = xlErrorHandler

      'Start a long duration task
      For x = 1 to 1000000
         For y = 1 to 10
         Next y
      Next x

      Exit Sub
   UserInterrupt:
      If Err = 18 Then
         If MsgBox ("Stop processing records?", vbYesNo) = vbNo Then
            'Continue running at the point procedure was interrupted
            Resume
         Else
            'Handle other errors that occur
            MsgBox Error(Err)
         End If
      End If
   End Sub
				
ProcessData 매크로를 실행할 Ctrl + Break를 빠르게 키를 누르면 레코드 처리를 중지할 것인지 여부를 묻는 메시지 상자가 나타납니다. 를 누르면 "사용자 인터럽트가 발생했습니다" 가진 다른 메시지 상자가 나타납니다. 이 메시지 상자에서 확인 을 누르면 매크로가 끝납니다. 첫 번째 메시지 상자에서 아니오 를 누르면 매크로가 계속됩니다.

Resume 문

Resume 문이 오류 처리 루틴을 완료한 후 코드 실행을 다시 시작합니다.

속성

기술 자료: 193247 - 마지막 검토: 2007년 1월 23일 화요일 - 수정: 5.4
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Excel 2004 for Mac
  • Microsoft Excel X for Mac
  • Microsoft Excel 2001 for Mac
  • Microsoft Excel 98 for Macintosh
키워드:?
kbmt kbdtacode kbhowto KB193247 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com