【发布时间】:2015-04-27 19:56:36
【问题描述】:
如果不设置标签,VBA 错误处理程序是否可以在 With 语句的开头恢复?
例如:
Dim rst As DAO.Recordset
Set rst = Nothing
On Error GoTo ErrHand
With rst
.AddNew
!MyValue = 1
.Update
.Bookmark = .LastModified
End With
ErrHand:
If Err.Number <> 0 Then
Call SetRST 'Assume this procedure opens the recordset appropriately
Resume
End If
End Sub()
代码将导致“.AddNew”行出错,然后当它通过错误处理程序时将设置记录集,但随后它将在“.AddNew”行恢复。问题是它仍然在 CommentRST 是空的“With”语句中。有没有办法告诉错误处理程序在“With RST”行或“.AddNew”行恢复而不在“With”语句之前创建标签或首先检查空白记录集?
我知道有一些方法可以解决这个问题(正如我刚刚建议的其中 2 个),但我很好奇这是否可行。
【问题讨论】:
-
添加前为什么不检查记录集?
-
您是否这样处理它是因为您调用
.AddNew时您的顶部rst可能未打开? -
@Brad 为什么选择 ADO 和 MS Access? stackoverflow.com/questions/2631678/vba-check-if-object-is-set
-
你在问是否有类似
Resume Previous的东西(没有)。代码按顺序执行,并且在没有明确被告知要去哪里的情况下不会“倒退”或回到之前的某个点。在这种情况下,编译器如何知道在With块的开头(而不是在其他点)恢复?