求助:如何隐藏Excel中指定工作表(BoM)之后的所有工作表?
问题出在哪
你原来的代码用ws.Name > "BoM"是在比字符串的字典序,不是比工作表在工作簿里的实际位置!比如叫"BoM1"的表字符串比"BoM"大,但如果它在BoM左边,也会被错误隐藏;而叫"Zzz"的表要是在BoM左边,反而不会被藏,完全不是你要的效果。
修正后的代码
Sub HideSheetsAfterBoM() Dim bomSheet As Worksheet Dim ws As Worksheet Dim bomIndex As Integer ' 先找到"BoM"表,防止找不到报错 On Error Resume Next Set bomSheet = ThisWorkbook.Worksheets("BoM") On Error GoTo 0 ' 找到的话就执行隐藏逻辑 If Not bomSheet Is Nothing Then bomIndex = bomSheet.Index For Each ws In ThisWorkbook.Worksheets ' 比BoM的位置序号大,就是在它后面的表 If ws.Index > bomIndex Then ws.Visible = xlSheetHidden End If Next ws Else MsgBox "没找到叫""BoM""的工作表!" End If End Sub
为啥这么写
bomSheet.Index拿的是BoM在工作簿里的位置序号(从左到右第一个是1,依次递增),这才是判断"之后"的正确标准。- 加了容错:要是工作簿里没BoM表,会弹提示,不会直接崩。
- 用
ThisWorkbook明确指当前代码所在的工作簿,别误操作别的打开的文件。
内容的提问来源于stack exchange,提问作者Geographos
相关产品推荐
相关产品推荐

