2011-07-29 11 views
1

フォームのボタンをクリックすると実行されるサブルーチンがあります。問題は、何が起きてもエラーブロックが実行され、その理由を理解できないということです。私はAccess VBAにあまり良くないので、単純なエラーかもしれません。vbaブロックが実行されていないときに実行する

はここに私のサブです:

確かに、奇妙な行動だ
Public Sub findRecord() 

    Dim rs As DAO.Recordset 

    Set rs = Me.[dbo_NCL_SimmonsCodes subform1].Form.Recordset 

    rs.FindFirst "NCL_ItemNum=""LSIM-" & Me.Text0 & """" 

    If rs.NoMatch Then 

     MsgBox "No match found. Please try again." & vbNewLine & vbNewLine & "If this is a new item, please click the Add Record button to add.", vbInformation, "No Match" 

    End If 

On Error GoTo description_Error 

    Me.lblDescription.Caption = DLookup("Description", "dbo_AL_ItemUPCs", "ItemCode ='" & Me.Text0 & "'") 

Exit_FindRecord: 
    Exit Sub 

description_Error: 

     MsgBox "Error " & Err.Number & ": " & Err.Description & vbNewLine & vbNewLine, vbExclamation, "VBA Error " & Err.Number 
     Me.lblDescription.Caption = "Error." 
     Resume Exit_FindRecord 

End Sub 
+1

ErrHandlerに到達すると、私たちは何を持っていますか?それは本当にゼロですか? –

+0

@Tiago Cardoso - はい、それは0です。 – MAW74656

+0

@Tiago Cardoso - または、それは0になるはずです(dlookupの作業が適切な一致を見つけたとき)が、メッセージボックスをすべて取得してはいけませんそのような場合に。 – MAW74656

答えて

0

実際はロジックエラーのようです。 FindFirstステートメントに一致がない場合、ルーチンは続行するのではなく、ルーチンを終了する必要があります。私はそのメッセージボックスの下に 'Exit Sub'を追加しました。

+0

お役立ち情報それは、キャプションの変更ブロックに関連する何かになっていると聞こえていました... –

1

VBAのエラートラップの動作を 'Unhanded Errorsでブレーク'から 'Break on All Errors'に変更して、エラーが発生しているかどうかを確認することをお勧めします。

問題がどこにあるかを具体的に調べるもう1つのことは、コードをスライスすることです。私の最初の提案は、キャプションの変更行を削除し、動作がまだ起こっているかどうかを確認するためにサブプログラムを再実行することです。

さらに、プロジェクト全体がコンパイルされていることを確認してください。そうでない場合、VBAは奇妙な振る舞いを簡単に提示することができます。

変更して、何が起こったのか教えてください...私はコードに間違ったものは何も見えません。