首先,我对问题“是否更改工作表名称?"选择了“是”。然后出现消息“键入新的工作表名称”。我没有键入新名称并选择“确定”,而是选择了“取消”按钮,显示了错误消息。如何避免看到错误消息并让宏“安静地”结束?
Option Explicit ' Force explicit variable declaration.
Sub ChangeSheetName()
Dim Carryon As String
On Error GoTo eh
Carryon = MsgBox("Change Worksheet Name?", vbYesNo)
If Carryon = vbYes Then
Dim shName As String
Dim currentName As String
currentName = ActiveSheet.Name
shName = InputBox("Type new Worksheet name")
ThisWorkbook.Sheets(currentName).Name = shName
End If
Exit Sub
eh:
MsgBox "The following error occured." _
& vbCrLf & "" _
& vbCrLf & "Error Number is: " & Err.Number _
& vbCrLf & "" _
& vbCrLf & "Error Description is: " & Err.Description _
& vbCrLf & "" _
& vbCrLf & "You likely hit the Esc key to stop renaming the Worksheet." _
& vbCrLf & "" _
& vbCrLf & "No worries. You can try again to rename or leave it as is." _
& vbCrLf & "" _
& vbCrLf & "No harm done."
End Sub
6条答案
按热度按时间t5fffqht1#
谢谢大家的回答。
最后我只是删除了错误处理代码并添加了一个额外的If语句。
cpjpxq1n2#
您已经将Carryon声明为字符串变量- vbYes(和其他消息框结果)是数值常量。
kdfy810k3#
如果用户按“取消”,则InputBox-Function返回空字符串(“”)。如果尝试使用该空字符串作为工作表名称,则会出现运行时错误(因为这不是有效的工作表名称),并触发错误处理程序。
要避免这种情况,只需在指定名称之前检查
shName
是否不是空字符串。o8x7eapl4#
可以使用
StrPtr
来处理InputBox。这是一个未公开的函数,用于获取变量的底层内存地址。下面是一个例子
3b6akqbq5#
请尝试下一种方法:
svdrlsy46#
重命名工作表
ThisWorkbook
)。在退出之前,仅当操作成功时才会显示消息框。