使用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
关键修改说明
- 输入处理:通过
Type:=2限制输入框仅接受文本,同时将RosterCycle改为变体类型,兼容取消操作返回的布尔值,避免类型不匹配。 - 变量规范:显式声明
found变量,消除隐式变体带来的潜在问题。 - 多选逻辑:用
ws.Select False实现多表选中,确保所有符合条件的工作表被同时选中。 - 用户提示:增加取消操作和未找到匹配项的提示,提升交互体验。
内容的提问来源于stack exchange,提问作者BigSteveo
相关产品推荐
相关产品推荐

