excel - 为什么错误处理程序不处理第二个错误?
问题描述
我正在尝试复制给定的工作表并重命名该副本 sheet2,但如果 sheet2 存在,则将其重命名为 sheet3,如果 sheet3 存在,则将其重命名为 sheet4 等。
我正在尝试使用带有错误处理的无限while循环(即,如果它尝试重命名工作表并且存在相同的工作表,它会处理错误并将后缀增加1,但如果没有发生错误,则退出循环)。
Sub Clone()
Application.ScreenUpdating = False
Dim ParamsToBeCloned As String
Dim wsNumber As Long
Dim suffix As Long
ParamsToBeCloned = Sheets("Interface").Range("ParamsToBeCloned")
wsNumber = Sheets(ParamsToBeCloned).index
Sheets(ParamsToBeCloned).Copy after:=Sheets(wsNumber)
suffix = 2
Do While True
On Error GoTo sheetExists
ActiveSheet.Name = ParamsToBeCloned & suffix
Exit Do
sheetExists:
suffix = suffix + 1
Loop
Sheets("Interface").Select
Application.ScreenUpdating = True
End Sub
这在 Params2 存在以生成 Params3 时有效,但如果 Params2 和 Params3 都存在,则会引发错误
“这个名字已经被占用了。换一个试试。”
我不明白为什么当 Params2 存在时它能够产生 Params3,但是当 Params2 和 Params3 都存在时它不能产生 Params4。
也就是说,为什么第二次没有处理错误?
解决方案
只是使用的替代方法On Error
:
For x = 2 To 1000
If Application.Evaluate("ISREF(" & ParamsToBeCloned & x & "!A1)") = False Then
ActiveSheet.Name = ParamsToBeCloned & x
Exit For
End If
Next x
要检查工作表是否存在,我们可以尝试查看是否ISREF
返回 aTRUE
或FALSE
。在 上FALSE
,您可以命名您的工作表。
根据@Peh 他的评论,您可能需要一种方法来首先检查ParamsToBeCloned
&x
是否是有效的工作表名称。
推荐阅读
- sql - 按查询中所需的帮助分组
- python - 在多处理 python 中无法访问全局变量
- ms-access - 通过更改组合框访问 vba 移动到记录
- postgresql - 如何处理 postgresql 中的递归聚合
- apache-storm - 杀死风暴拓扑后的资源清理
- list - 如何删除所有事件?
- erlang - 是否可以将 erlang 的 :math 函数重新创建为 elixir 宏?
- google-apps-script - makeCopy() 函数从用户驱动器返回复制文件的 URL 和标题
- android - Google Ads 突然从所有生产中的应用程序中消失
- node.js - 错误代码:10021,错误消息:“Uncaught TypeError: n(...).connect is not a function”