You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用MsgBox选Cancel触发1004错误,需让VBA宏静默正常结束

解决InputBox取消后触发错误提示的问题

要实现点击InputBox的「Cancel」或未输入内容就关闭时静默结束宏,核心是在执行工作表改名前先判断输入内容是否有效,避免触发错误。

修改后的代码

Option Explicit ' 强制显式声明变量

Sub ChangeSheetName()
    Dim Carryon As VbMsgBoxResult ' 改用MsgBox返回值的正确枚举类型,避免类型不匹配
    Dim shName As String
    Dim currentName As String
    
    On Error GoTo eh

    Carryon = MsgBox("Change Worksheet Name?", vbYesNo)

    If Carryon = vbYes Then
        currentName = ActiveSheet.Name
        shName = InputBox("Type new Worksheet name")
        
        ' 关键判断:输入为空(点击Cancel或未输入内容)时,直接跳过改名操作
        If shName <> "" Then
            ThisWorkbook.Sheets(currentName).Name = shName
        End If
    End If

Exit Sub
eh:
    MsgBox "发生以下错误:" _
        & vbCrLf & "" _
        & vbCrLf & "错误代码: " & Err.Number _
        & vbCrLf & "" _
        & vbCrLf & "错误描述: " & Err.Description _
        & vbCrLf & "" _
        & vbCrLf & "你可能按下了Esc键或输入了无效的工作表名称。" _
        & vbCrLf & "" _
        & vbCrLf & "无需担心,你可以重试改名或保持原名。" _
        & vbCrLf & "" _
        & vbCrLf & "不会有任何不良影响。"
End Sub

关键修改说明

  1. 变量类型修正:将Carryon的类型从String改为VbMsgBoxResult,这是MsgBox返回值的标准枚举类型,避免潜在的类型不匹配问题。
  2. 输入有效性校验:在获取输入值后添加判断逻辑,当用户点击Cancel(此时返回空字符串)或未输入内容就确认时,直接跳过改名步骤,宏会自然结束,不会触发错误分支的提示框。

如果需要精准区分「用户点击Cancel」和「主动输入空内容」的场景,可以用StrPtr函数判断:

' 替换原有的shName判断逻辑
If StrPtr(shName) = 0 Then
    ' 用户点击Cancel,直接退出
    Exit Sub
ElseIf shName = "" Then
    ' 用户主动输入空内容,可选择提示或静默退出
    MsgBox "工作表名称不能为空!"
    Exit Sub
Else
    ThisWorkbook.Sheets(currentName).Name = shName
End If

内容的提问来源于stack exchange,提问作者JasperX99

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 00:35:19