MS Access/ VBA : 添加 if 条件到 vba 代码

MS Access/ VBA : add if condition to vba code

我有以下代码:

Private Sub Command66_Click()
DoCmd.SetWarnings False
DoCmd.DeleteObject acTable, "Table1"
DoCmd.DeleteObject acTable, "Table2"
DoCmd.DeleteObject acTable, "Table3"
DoCmd.SetWarnings True
End Sub

问题是如果 "Table1" 不存在,我会收到一个 VBA/debug 错误。我可以添加一些条件,如果脚本没有找到 "Table1" 它应该进一步删除其他 2 个表而不返回任何错误消息吗?

你是说错误捕获?这是一个如何 "trap" 出错的示例 - 如果在尝试删除 Table1 时出错,它会询问您是否要继续:

Private Sub Command66_Click()
DoCmd.SetWarnings False

On Error Resume Next
DoCmd.DeleteObject acTable, "Table1"

If Err.Number > 0 Then
    Err.Clear
    On Error GoTo 0
    If MsgBox("There was an error trying to delete Table1, do you want to continue?", vbYesNo) = vbYes Then
        DoCmd.DeleteObject acTable, "Table2"
        DoCmd.DeleteObject acTable, "Table3"
    End If
End If
DoCmd.SetWarnings True
End Sub

如果您决定捕获并忽略该错误,请首先忽略 错误 7874(Microsoft Access 找不到对象 ''。) 您可能不想忽略其他错误,例如在使用 table 时。

Private Sub Command66_Click()

    Dim strMsg As String

On Error GoTo ErrorHandler

    DoCmd.DeleteObject acTable, "Table1"
    DoCmd.DeleteObject acTable, "Table2"
    DoCmd.DeleteObject acTable, "Table3"

ExitHere:
    Exit Sub

ErrorHandler:
    Select Case Err.Number
    Case 7874 'Microsoft Access can't find the object
        Resume Next
    Case Else
        strMsg = "Error " & Err.Number & " (" & Err.Description _
            & ") in procedure Command66_Click"
        MsgBox strMsg
        GoTo ExitHere
    End Select
End Sub

备注:

  • 如果您发现其他希望忽略的错误,可以将这些错误编号添加到第一个 Case 语句中:Case 7874, <another number here>
  • 我看不出有任何理由在此过程中关闭 SetWarnings
  • 考虑 Alex 的 以检查 table 是否存在,然后再尝试删除它。

好吧,如果您想删除仅存在于 Access 中的 table,那么您只需检查该对象即可,这是您通常的做法:

On Error Resume Next
If IsObject(CurrentDb.TableDefs("Table1")) Then
    DoCmd.DeleteObject acTable, "Table1"
End If