【发布时间】:2021-03-11 06:29:18
【问题描述】:
我在使用 Resume 时遇到了问题,虽然我通过使用 On Error GoTo 找到了另一个解决方案,但我仍然对为什么下面的代码不起作用感到困惑。发生初始错误是因为工作表名称“Sheet_1”已被占用。这意味着,在监视窗口中,在执行 Resume NameAgain 之前,err.number 的值为 1004。不是清除错误并跳回标签,而是发生错误 20(无错误恢复),代码移至 End If 行。
鉴于存在活动错误 1004,我无法理解为什么它的行为就像没有错误一样。我已经在该站点上搜索了错误 20 问题,但没有什么能真正为我解决这个问题,也没有让我理解它背后的逻辑。非常感谢任何帮助。
Sub ErrorTest()
Dim i as integer:i=1
NameAgain: On Error Resume Next
Worksheets("Main").Name = "Sheet_" & i
If Err.Number = 1004 Then
i = i + 1
Resume NameAgain
End If
End Sub
paxdiablo 评论后更新:
以上是试图复制但简化我遇到的问题的糟糕尝试。我正在使用的代码部分如下:
Activate CheckBook to use ActiveWindow
CheckBook.Activate
Set DestSheet = CheckBook.Worksheets.Add(After:=CheckBook.Sheets(1))
On Error Resume Next
v = 1
NameAgain: DestSheet.Name = ExpBookName & "_" & v
If Err.Number = 1004 Then
v = v + 1
Resume NameAgain
End If
On Error GoTo 0
ActiveWindow.DisplayGridlines = False
Set DestCell = DestSheet.Range("A2")
所以解决方法是将 On Error Resume Next 移动到标签行并使用 GoTo 代替 Resume。
【问题讨论】:
-
没有发生错误。在实际发生错误之前,您无法访问
Err。当完全没有错误时,您希望它包含什么? -
这一行出现错误:Worksheets("Main").Name = "Sheet_" & i 因为已经有一个名为"Sheet_1"的工作表
-
抱歉,Ken,我上面提供的代码是我在一个更大的过程中遇到的问题的简化版本的尝试。正如您正确指出的那样,上面提供的代码不会通过 IF 标准。
标签: vba