隐藏工作表的基础上,他们的名字的结尾部分 – VBA

我的工作簿中有大量的工作表。 我只需要制作名称为“Main”的工作表和以“_Summary”结尾的制表符。

[在总结之前注意下划线]

在进入困难的部分之前,我尝试了一个基本的逻辑,只是隐藏主工作表和另一个名为Monthly_Summary的工作表。 我可以完成这个逻辑,但如何概括它来检查它与_Summary结尾的工作表。 这是守则,

Sub tabopen() Application.ScreenUpdating = False Dim ws As Worksheet For i = 1 To Worksheets.Count Workseetname = Worksheets(i).Name If (Workseetname = "Main" Or Workseetname = "Monthly_Summary") Then Sheets(Workseetname).Visible = True Else Sheets(Workseetname).Visible = False End If Next i Application.ScreenUpdating = True End Sub 

请告知并分享您的想法。 提前致谢。

隐藏“主要”和“* _Summary”工作表:

 Sub tabopen() Application.ScreenUpdating = False Dim i As Long For i = 1 To Worksheets.Count Worksheets(i).Visible = Not (Worksheets(i).Name = "Main" Or _ Worksheets(i).Name Like "*_Summary") Next i Application.ScreenUpdating = True End Sub 

逻辑部分是不正确的。 这是一个很容易通过的版本:

 Sub tabopen() Dim Worksheetname As String, i As Integer, shouldBeVisible As Boolean For i = 1 To Worksheets.Count Worksheetname = Worksheets(i).Name shouldBeVisible = Worksheets(i).Name = "Main" Or Right(Worksheets(i).Name, 8) = "_Summary" Sheets(Worksheetname).Visible = shouldBeVisible Next i End Sub 

如果你已经做了很多很多的工作表删除和创build新的工作表(特别是如果有图表作为新工作表),我不会相信索引通过工作表,因为它是一个集合。 我在2002年遇到了Excel崩溃的问题,试图引用Worksheet(i).Name; Excel根本找不到索引。
从那以后,我知道Excel已经改变了。
无论哪种方式,这是遍历工作表的“安全”方式:

 Sub mySub() Dim Sh1 As Worksheet For Each Sh1 In ThisWorkbook.Sheets Sh1.Visible = Not (Sh1.Name = "Main" Or Sh1.Name Like "*_Summary") Next End Sub