Excel for Mac で Visual Basic for Applications エラーのトラップ

文書翻訳 文書翻訳
文書番号: 193247
すべて展開する | すべて折りたたむ

目次

概要

実行時エラーは、マイクロソフトの Visual Basic でアプリケーションのときマクロの画面にエラー メッセージが表示され、マクロを停止または、予期しない動作します。

アプリケーションのクラッシュや予測できない動作を回避するには、エラーを遮断して、方法については、マクロのマクロ コードを追加するのにはそれを処理します。受け取り、実行時エラーを処理するプロセスです。「エラー トラッピングします」と呼ばれるアプリケーションに指示する一連の命令エラーの処理方法を「エラー処理ルーチン」または"エラーと呼びます"ハンドラーです。

詳細

Microsoft プログラミング例としては、明示または黙示の保証もないだけを提供します。これを含むが、商品性や特定目的への適合性の黙示的な保証に制限はありません。この資料は、例示されているプログラミング言語やを作成したりプロシージャをデバッグするために使用されるツールに精通するいると仮定します。マイクロソフト サポート エンジニアに、特定のプロシージャの機能について説明する役立ちますが追加機能を提供またはお客様固有の要件を満たすようにプロシージャを作成するこれらの例は変更されません。 Visual Basic のコードの実行中に、いくつかの種類があります。トラップできるエラーです。エラー トラップを利用することができます。Microsoft Excel for Mac は、次の関数とステートメントを使用します。

Error ステートメントで

は、 上のエラー ステートメントは、Visual Basic アプリケーションを開始または停止するエラー トラップされます。は、 上のエラー ステートメントは、エラーが発生した場合に実行されるステートメントのセットも指定します。

関数をエラーします。

は、 エラー 発生したエラーの数を返します。

例を使用して、 エラー 関数:
   Msgbox "The most recent error number is " & Err & _
      ". Its message text is: " & Error(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
				

Error 関数

は、 エラー 関数は、特定のエラー番号に対応するエラー メッセージを返します。

例を使用して、 エラー 関数:
   Msgbox "The message text of the error is: " & Error(Err)
				

Error ステートメント

は、 エラー ステートメントは、カスタムのエラー番号を割り当てることにより、発生したエラーをシミュレート、 エラー 関数です。ユーザー定義のエラー値の手順を定義し、保存されて常にいるの変数の値には、 バリアント型 データを入力します。この値の型エラーの一般的な用途は、複数の引数をそのまま使用し、値を返すプロシージャでです。たとえば、戻り値は引数が特定の範囲内でのみ該当する場合に有効です。引数は、ユーザーを提供する、プロシージャをテストして、引数が許容範囲内にない場合は、プロシージャの戻り値エラーを適切な値を持つことができます。

エラー サブタイプである、 バリアント型 データ型と、「エラー値」という用語が使用される場合は、通常、変数がであること、 バリアント型 種類、および Visual Basic for Applications をユーザー定義のエラーとして認識する値が含まれています。エラー値は、プロシージャでエラー条件が発生したことを示すために使用されます。であるため通常の実行時エラーとは異なり、これらのエラー コードを中断しないでください。通常の変数としないエラーとして認識します。プロシージャをテストします。これらのエラー値し、適切な修正処理を実行します。

できます、 エラー 実行時エラーをシミュレートするステートメントを指定します。これは、アプリケーションをテストするとき、またはランタイムに同等であるとは、特定の条件を処理する必要がある場合に便利です。エラーです。任意の Visual Basic for Applications の実行時エラーをシミュレートすることができます。エラーのエラー コードを指定することによって、 エラー ステートメントです。できます、 エラー ステートメントを Visual Basic for Applications の実行時エラーに対応していないエラー コードを指定することにより、独自のユーザー定義エラーを作成します。組み込みのエラーの一覧が含まれているテーブル」(「Err 関数」の下に表示されます。セクション)。この時点で、Visual Basic for Applications のすべてのことはできません。組み込みのエラーとして使用可能なです。ビジュアルの今後のリリースでアプリケーションの基本的な内部の番号より構築も増加していきます 〜エラーが追加されます。エラー番号を開始することをお勧め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 つの組み込みエラー値の Excel for mac で次の表は、エラー番号 (定数)、リテラルのエラー値が表示されますと、変換後のエラー値です。
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 関数です。ワークシート エラーの唯一の違いは、組み込みのエラー番号 Visual Basic for Applications を提供します。定数リテラルのエラー値も提供します。これらの項目はありません。ユーザー定義のエラー値を提供します。リテラルのエラー値をする必要があります。上の表に示すように角かっこを囲みます。

組み込みエラー値の使用例:
   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
				

エラー処理コードを集中管理します。

エラー処理コードを Visual Basic にアプリケーションを追加したときマクロが検出上で同じエラーが処理されていることと何度も。コードと必要な作業量を減らすことができます。いくつかの手順を記述することにより、コードを記述するのには、エラー処理コード一般的なエラー状況を処理するために呼び出すことができます。

次が表示されますは、function プロシージャの例には、発生したエラーに対応するメッセージと、可能であれば、選択して次に実行する動作を指定するユーザーをできるようにします。特定のボタンをクリックします。これは、後、コード番号プロシージャには戻りそれと呼ばれます。
   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
				

ユーザーが処理を中断します。

ユーザーは、Visual Basic for Applications プロシージャが中断できます。コマンド + ピリオド キーを押すとします。割り込みを無効にすることが可能です。完成したアプリケーションでプロシージャします。ただし、無効にしていない場合完成したプロシージャでユーザーが中断する、ことを確認してください、プロシージャは、閉じることができますように、割り込みが発生したときに通知されます。共有リソースから切断するファイルまたは変数の復元の変更ユーザーにアプリケーションの制御を返す前にします。

設定することで、プロシージャでユーザーによる割り込みをトラップできる、EnableCancelKey プロパティ xlErrorHandler.このプロパティが設定されている場合は、すべての割り込みを使用してトラップできるランタイム エラー番号 18 が生成されます、 上のエラー ステートメントです。プロシージャを一時停止して、プログラムを終了するには、エラーを処理することができます。場合は、 再開 ステートメントを使用して、トラップの実行時エラーの後で処理を続行するのには、割り込みは無視されます。

設定してユーザーの割り込みを完全に無視することも、EnableCancelKey プロパティ xlDisabled.この状態では、Excel for Mac に実行中のプロシージャを中断しようとしてユーザーは無視されます。デフォルトの割り込み処理を復元するには、設定を変更、 EnableCancelKey プロパティ xlInterrupt.ユーザーによる割り込みが恒久的に無効にすると、プロシージャを防止するには、Excel for Mac は、常に、デフォルト設定の復元を EnableCancelKey プロパティ xlInterrupt ときに、プロシージャが実行を完了します。コード内で割り込みが正しく処理されることを確認するには、明示的に無効にするか、プロシージャを実行するたびに、割り込みをトラップする必要があります。注意してくださいその 1 つだけの割り込みハンドラー各プロシージャには、使用できるとは、そのプロシージャで発生するすべてのランタイム エラーは、同じハンドラーが使用されます。

次の使用例は、大規模なする必要があります手順を示しています。完了までに時間の期間です。エラーの手順は、ユーザーが中断した場合トラップされます。プロシージャには、する必要があります最初、ユーザーによる割り込みを確認実際に停止して、所定の手順で、プロシージャを終了します。
   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 キーをすばやく押して、レコードの処理を停止するかどうかを確認するメッセージ ボックスが表示されます。クリックすると、 [はい]、別のメッセージ ボックスに「ユーザーによる割り込みが発生しました」表示されます。クリックすると、 [OK] このメッセージ ボックスで、マクロが終了します。場合は、クリックしてください。 いいえ 最初のメッセージ ボックスで、マクロを続行します。

Resume ステートメント

は、 再開 後は、エラー処理コードが実行されるステートメントが再開されます。ルーチンが完了しました。

プロパティ

文書番号: 193247 - 最終更新日: 2011年10月6日 - リビジョン: 4.0
キーワード:?
kbhowto kbdtacode kbmt KB193247 KbMtja
機械翻訳の免責
重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。
英語版 KB:193247
Microsoft Knowledge Base の免責: Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。

フィードバック

 

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