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

使用VBA搜索含指定字符串的工作表时遇运行时错误13求助

解决VBA运行时错误13(类型不匹配)问题

错误根源

  • 类型不匹配触发错误13:Application.InputBox默认返回变体类型,当用户点击输入框的「取消」按钮时,会返回布尔值False,而你声明的RosterCycle是字符串类型,将布尔值赋值给字符串变量直接触发类型不匹配错误。
  • 未显式声明found变量:虽然这不是错误13的直接诱因,但会导致代码存在隐式变体变量,不符合VBA编码规范。
  • 多选逻辑失效:原代码的ws.Select每次仅会选中单个工作表,无法实现同时选中所有符合条件的工作表。

修正后的代码

Public Sub FindSheets()
    Dim RosterCycle As Variant
    Dim ws As Worksheet
    Dim found As Boolean

    ' 指定Type:=2强制只接受文本输入,同时兼容取消操作的返回值
    RosterCycle = Application.InputBox("Enter Roster Cycle", Type:=2)
    ' 处理用户取消输入的场景
    If RosterCycle = False Then
        MsgBox "已取消操作"
        Exit Sub
    End If

    found = False
    ' 实现多表选中逻辑:首次匹配直接选中,后续追加选中
    For Each ws In ActiveWorkbook.Sheets
        If ws.Name Like "*" & RosterCycle & "*" Then
            If Not found Then
                ws.Select
                found = True
            Else
                ws.Select False ' 保留已选中工作表,追加当前表
            End If
        End If
    Next ws

    ' 未找到匹配表时提示用户
    If Not found Then
        MsgBox "未找到包含 """ & RosterCycle & """的工作表"
    End If
End Sub

关键修改说明

  1. 输入处理:通过Type:=2限制输入框仅接受文本,同时将RosterCycle改为变体类型,兼容取消操作返回的布尔值,避免类型不匹配。
  2. 变量规范:显式声明found变量,消除隐式变体带来的潜在问题。
  3. 多选逻辑:用ws.Select False实现多表选中,确保所有符合条件的工作表被同时选中。
  4. 用户提示:增加取消操作和未找到匹配项的提示,提升交互体验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 11:42:49