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

Posted

技术标签:

【中文标题】MS Access/ VBA:将 if 条件添加到 vba 代码【英文标题】:MS Access/ VBA : add if condition to vba code 【发布时间】: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 个表而不返回任何错误消息?

【问题讨论】:

先看是否存在:how to check if table is exists or not in ms access for vb macros? 【参考方案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?

以上是关于MS Access/ VBA:将 if 条件添加到 vba 代码的主要内容,如果未能解决你的问题,请参考以下文章

如何在运行时使用 VBA 将按钮添加到 MS Access 表单并将代码添加到 _Click() 事件

MS SQL 2008/Access 2002 VBA - 检查数据库的当前记录,如果不存在则输入

MS Access 2016 VBA 在组合查询条件中为空

MS Access 将 xslt 嵌入到 vba

使用 vba 将 MS Access 查询输出到 Excel

如何在 MS Access VBA 上将文本框注释值输入设置为表格数据插入