【问题标题】:MS Access/ VBA : add if condition to vba codeMS Access/ VBA:将 if 条件添加到 vba 代码
【发布时间】:2016-01-27 15:58:31
【问题描述】:

我有以下代码:

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/调试错误。我可以添加一些条件,如果脚本没有找到“Table1”,它应该进一步删除其他 2 个表而不返回任何错误消息?

【问题讨论】:

标签: ms-access vba ms-access-2013


【解决方案1】:

你的意思是错误捕获?这是一个如何“捕获”错误的示例 - 如果在尝试删除 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

【讨论】:

    【解决方案2】:

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

    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 的 suggestion,在尝试删除表之前检查表是否存在。

    【讨论】:

      【解决方案3】:

      好吧,如果你想删除只存在于 Access 中的表,那么你可以简单地检查对象,这是你通常的做法:

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

      【讨论】:

      • 你是否在 if 语句之前设置了 On Error Resume Next?
      猜你喜欢
      • 2017-11-17
      • 2012-03-03
      • 1970-01-01
      • 1970-01-01
      • 2021-10-15
      • 2018-06-24
      • 2013-04-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多