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 - 检查数据库的当前记录,如果不存在则输入