VBA如何定位并操作名称含“Roster”的最后一个Excel工作表
VBA定位最后一个名称含指定字符串的工作表
你可以通过两种常用方案实现需求,核心逻辑都是避免匹配到符合条件的表就立即执行操作,先定位到目标表再统一处理:
方法1:正序遍历记录最后匹配项
遍历所有工作表时,每次匹配到符合条件的表就更新目标变量,遍历结束后变量存储的就是标签排序最靠后的符合要求的工作表:
Dim targetWs As Worksheet Dim i As Long For i = 1 To ThisWorkbook.Worksheets.Count If Worksheets(i).Name Like "*Roster*" Then ' 匹配到就更新目标,最后一次更新的就是排序最后的符合条件表 Set targetWs = Worksheets(i) End If Next i ' 非空判断避免无符合条件表时出错 If Not targetWs Is Nothing Then targetWs.Activate ' 其余需要执行的操作写在此处即可 End If
这种写法逻辑简单易读,适合工作表总量不多的场景,运行效率足够日常使用。
方法2:倒序遍历直接匹配(效率更高)
直接从最后一个工作表往前倒序遍历,第一个匹配到的就是你需要的最后一个符合条件的表,找到后可以直接中断遍历,工作表数量越多效率优势越明显:
Dim targetWs As Worksheet Dim i As Long ' 从最后一个工作表倒序遍历 For i = ThisWorkbook.Worksheets.Count To 1 Step -1 If Worksheets(i).Name Like "*Roster*" Then Set targetWs = Worksheets(i) ' 找到目标直接退出循环,无需遍历剩余表 Exit For End If Next i If Not targetWs Is Nothing Then targetWs.Activate ' 其余需要执行的操作写在此处即可 End If
注意事项
- 两种方案里的「最后一个」均指工作表标签栏从左到右排序的最后一个,如果你动态生成的新表默认追加在所有工作表末尾,两种方案都可以匹配到最新生成的含
Roster的表。 - 额外增加的非空判断可以避免工作簿内无符合条件的工作表时触发空对象报错。
内容的提问来源于stack exchange,提问作者codeEnthusiast
相关产品推荐
相关产品推荐

