LoginSignup
frswataru
@frswataru (本石 渉)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Acess VBA エラーが発生したら処理を抜ける

Q&AClosed

解決したいこと

AccessVBAにおいて一連の処理を行っています。
下記の固有のエラーメッセージが出たときのみ一連の処理抜けを行いたく。
(DoCmd.OpenQuery "Q_T_工程名称_W_2_Add", acViewNormal, acEditを実行後
エラーがダイアログが発生したら処理抜け)

解決方法をご教示お願いお願いします。
image.png

Private Sub 新規追加_Click()

    Set DB = CurrentDb()
    Set D3 = DB.OpenRecordset("T_工程名称_W_2")
    j = D3.RecordCount
      
    If j = 0 Then
    
        MsgBox ("レコードを入力してください")
        DB.Close
'             Me.Requery
'        Me.Repaint
        'Me.工程名称出力.Requery
        Exit Sub
    End If
    
        DoCmd.OpenQuery "Q_T_工程名称_W_2_Add", acViewNormal, acEdit
        
'____________LogUpDate________________________

        Dim Status As String
        Dim UserName As String
        
        Status = "新規追加"
        UserName = Environ("USERNAME")
        
        Call LogUp(Status, UserName)

'______________________________________________
        
        
        
    
        SQLcmd = "DELETE T_工程名称_W.* FROM T_工程名称_W;"
    
        DB.Execute SQLcmd
        
                
        SQL1 = "SELECT M_工程名称.* "
        SQL1 = SQL1 & "FROM M_工程名称 ;"
    
    
        Set D1 = DB.OpenRecordset(SQL1, dbOpenDynaset)
        Set D2 = DB.OpenRecordset("T_工程名称_W")
        
    
        Do Until D1.EOF = True
            D2.AddNew
            For ix0 = 0 To 1
                D2.Fields(ix0) = D1.Fields(ix0)
            Next ix0
            D2.Update
            D1.MoveNext
        Loop
    
        D1.Close
        DB.Close
            Me.Requery
        Me.Repaint
        Me.工程名称出力.Requery
        
        Call クリアボタン_Click
          
    
End Sub
0

1Answer

Comments

  1. @frswataru

    Questioner

    On Error では分岐出来ず。
    Debug.printでは0が返ります

  2. 「1件のレコードでキー違反」と表示されていますが、

    レコードを追加するクエリーを実行する前に、

    ・追加しようとするデータと競合するレコードがすでに存在していないか?
    ・追加しようとするデータがテーブルの制約に引っかかっていないか?

    など、整合性をチェックする処理を事前に実行して、判定してみてはどうでしょうか?

    クエリーを実行してエラーが出てから処理を分岐するより、
    エラーを出させない方が堅牢な作りになると思います。

  3. @frswataru

    Questioner

    そちらの方向で検討を進めていきます。
    ありがとうございます。

  4. VBAならばアラートをOFFにできた気がします。
    アラートをOFFにした上で、エラーの条件分岐を記載してあげのはいかがでしょうか。

  5. @frswataru

    Questioner

    @gx3n-inue
    整合性上手くいきましたありがとうございます。

Your answer might help someone💌