执行 "Convert Form's Macros to Visual Basic" 后删除按钮不再正常工作

Delete Button doesn't work properly any more after "Convert Form's Macros to Visual Basic" was executed

我创建了两个 tables

语言:
IDLanguage Language 1 English 2 German 3 French 4 Polish 5 Italian

问候:
IDGreeting Greeting IDLanguage_FK 1 Good Morning 1 2 Guten Morgen 2 3 Bonjour 3

两个 table 都通过外键 IDLanguage_FK 与选项 Enforce Referential Integrity 连接。因此 table languages 中的波兰语和意大利语在 table greetings 中没有对应的语言。

我创建了一个绑定到 语言 table 的表单,其中包含一个显示所有语言的列表框和一个删除按钮。这两个对象元素都是使用控件向导创建的。

如果我想删除波兰语或意大利语,不会有问题。如果我想删除前三种语言中的一种,会弹出一条错误信息,提示该记录包含greetingstable中的相关记录。目前一切正常。

将窗体的宏转换为 Visual Basic 现在会导致删除按钮出现问题。转换后,仍然可以删除这两种不相关的语言。但是如果我尝试删除三种相关语言中的一种,则不会弹出错误消息。

删除按钮的转换 VBA 代码如下所示:

Private Sub Button_Delete_Click()

On Error GoTo Button_Delete_Click_Err
On Error Resume Next

DoCmd.GoToControl Screen.PreviousControl.Name
Err.Clear

If (Not Form.NewRecord) Then
    DoCmd.RunCommand acCmdDeleteRecord
End If
If (Form.NewRecord And Not Form.Dirty) Then
    Beep
End If
If (Form.NewRecord And Form.Dirty) Then
    DoCmd.RunCommand acCmdUndo
End If
If (MacroError <> 0) Then
    Beep
    MsgBox MacroError.Description, vbOKOnly, ""
End If

DoCmd.RefreshRecord
    Button_Delete_Click_Exit:
       Exit Sub
    Button_Delete_Click_Err:
       MsgBox Error$
       Resume Button_Delete_Click_Exit
End Sub

有没有人遇到同样的问题,转换后不会弹出错误信息。出于我的目的,向用户显示此错误消息至关重要。

呃,生成的代码一团糟(抱歉)。

您不会收到错误消息,因为它都在 On Error Resume Next 之后运行,这会忽略所有错误。

我建议你从简单的开始,然后根据需要添加特殊情况:

Private Sub Button_Delete_Click()

On Error GoTo Button_Delete_Click_Err

    If (Not Form.NewRecord) Then
        DoCmd.RunCommand acCmdDeleteRecord
    End If

Button_Delete_Click_Exit:
   Exit Sub
Button_Delete_Click_Err:
   MsgBox Error$
   Resume Button_Delete_Click_Exit

End Sub