2017-09-01 16 views
0

Excelで非常に不慣れで、マクロのプログラミングに問題があります。私がブレークポイントを設定し、ステップオーバーしたかどうかに関係なく、エラーダイアログを表示せずに停止するだけです。Excel VBAのマクロとエラーメッセージ

何か不足していますか?エラーメッセージを明示的にオンにする必要がありますか?

モジュールでこのような何か、:

Function Provoke(XYZ As Integer) As Integer 
    Provoke = XYZ/0 
End Function 

機能が、私はそれが除算に文句を言うことができますどのようにこの

=Provoke(4711) 

のように、セルの内部式で使用されていますゼロ?

答えて

4

エラーがUDFとしてワークシートから呼び出される関数で発生した場合、あなたはあなただけ#VALUEエラーを取得するメッセージ - すべてのエラーが表示されませんが、セル(複数可)

あなたが呼び出す場合に戻りましたVBAのSubから同じ機能を使用すると、エラーが表示されます。

もっと特定のエラーメッセージを返すには、もう少しコーディングする必要があります。

など。

Function Provoke(XYZ As Integer) 

    On Error GoTo haveError 
    Provoke = XYZ/0 
    Exit Function 

haveError: 
    'what type of error did we get? 
    Select Case Err.Number 
     Case 11: Provoke = CVErr(xlErrDiv0) 
     Case Else: Provoke = "Error!" 
    End Select 

End Function 

このために良い参照:http://www.cpearson.com/excel/ReturningErrors.aspx

+1

他の特定のエラーもトラップする場合は、http://onlinelibrary.wiley.com/doi/10.1002/9781を確認してください。 118257616.app3/pdf(私は常にブックマークしておきます)。 –

+0

あなたの第1パラ! – curious

2

はい、あなたは、エラーが発生した場合にどうするかVBAを伝えるために準備をする必要があります。

エラーは、あなたのコード内でこの線の発生している:

Provoke = XYZ/0 

ませ数はゼロで割り切れるではありません、それはエラーを生成します。基本的な数学:any number ÷ 0 = ∞

、あなたがトラップするエラー番号だけでなく、ソースと説明このような何かを試すことがじかに確認するには:あなたが買ってあげるあなたが

=Provoke(4711) 

をしようとすると、今

Function Provoke(XYZ As Integer) 
    On Error Resume Next 
    Provoke = XYZ/0 
    If Err.Number <> 0 Then Provoke = "Error# " & Err.Number & " - generated by " & Err.Source & " - " & Err.Description 
    On Error GoTo 0 
End Function 

を結果は次のようになります。

Error# 11 - generated by VBAProject - Division by zero 
+2

'XYZ/0'はエラー値を返さないので、エラーが発生します。したがって、「Provoke」が「Variant」であっても、「Provoke」に割り当てられるものがないため、動作しません。エラーを返す必要がある場合は、発生したエラーをトラップして、それを可能にするために関数型を変更した後で、 'Variant/Error'を返す可能性があります。 – YowE3K

+0

良いpt YowE3K。私の最初の焦点は、 'XYZ/0'が無限の数であるという事実を強調することでした。あなたのノートに続いて、私はそれに応じて私の答えを更新しました。高槻 – curious

関連する問題