使用带通配符的Index公式为何触发下标越界错误?VBA求助
VBA中使用通配符匹配工作表名称引发下标越界的解决方法
你的写法确实有误——VBA的Sheets()集合不支持直接通过通配符*来模糊匹配工作表名称。你当前的代码fromWB.Sheets(VarCellValue & "*").Index是在尝试查找**名称完全等于VarCellValue&"*"**的工作表,而不是名称以VarCellValue开头的工作表,所以当不存在这样的工作表时就会触发下标越界错误。
要实现“查找以指定字符串开头的工作表编号”,需要遍历目标工作簿的所有工作表,逐一检查名称是否符合条件:
Dim ws As Worksheet Dim fromWS As Integer fromWS = -1 ' 初始化标记,未找到匹配工作表时保持-1 ' 遍历目标工作簿的所有工作表 For Each ws In fromWB.Sheets ' 检查工作表名称是否以VarCellValue开头 If Left(ws.Name, Len(VarCellValue)) = VarCellValue Then fromWS = ws.Index ' 记录匹配工作表的编号 Exit For ' 找到第一个匹配项后退出循环(若需匹配多个可删除此句) End If Next ws ' 后续在If语句中使用编号提取数据 If fromWS <> -1 Then ' 这里添加提取对应工作表数据的逻辑 sheetName = ActiveSheet.Name Else MsgBox "未找到以" & VarCellValue & "开头的工作表" End If
说明:
- 用
Left(ws.Name, Len(VarCellValue))截取工作表名称的前Len(VarCellValue)个字符,和VarCellValue直接对比,实现“开头匹配”的效果。 - 初始化
fromWS为-1,方便后续判断是否成功找到目标工作表。 - 如果存在多个名称以
VarCellValue开头的工作表,这段代码只会获取第一个匹配项的编号;若需要处理所有匹配项,删除Exit For并改用数组收集编号即可。
内容的提问来源于stack exchange,提问作者Sean
相关产品推荐
相关产品推荐

