前两天有个朋友咨询我,在下面的表格中,C列是每个表格的工作表名称的汇总,如何通过在工作表名称的后面填上一个字符X,让相应的工作表自动隐藏。 我第一印象想到的就是工作表事件,当单元格内容改变时,触发相应表格隐藏。 后来编写了如下代码,其中我把字符“X”优化了一下,利用数据有效性,每个工作表名称后面为隐藏和不隐藏两个选择: 将下述代码放置在NO.1中。就可以实现,隐藏哪一个工作表,选中哪一个工作表后面的状态后,工作表自动隐藏或者不隐藏。 Private Sub Worksheet_Change(ByValTarget As Range) On Error Resume Next m = Range("C" & Target.Row) If Target.Column = 4 AndRange("D" & Target.Row) = "隐藏" Then Worksheets(m).Visible = 0 ‘实现工作表隐藏的核心代码 ElseIf Target.Column = 4 AndRange("D" & Target.Row) = "不隐藏" Then Worksheets(m).Visible = -1 Else End If If Err <> Empty Then '如果错误存在,则提出原因,本程序错误主要是表格中文字跟实际工作表名称不一致。 MsgBox "不存在" & m & "工作表" End If End Sub
如果不用工作表事件实现批量隐藏工作表。可以做一个循环,点个按钮之后让工作表批量的隐藏或者取消隐藏。将下面代码放入模块中。就可以实现批量隐藏或者不隐藏工作表功能。 这个跟工作表事件的区别就是,工作表事件可以即刻生效,修改工作表状态后立马隐藏或者不隐藏。而这个改变工作表状态名称后,无法即刻生效。需要运行一下程序才能实现功能。 Sub 批量隐藏或取消隐藏工作表() For i = 4 To [c4].End(xlDown).Row If ActiveSheet.Cells(i, 4) = "隐藏" Then For Each sht In Worksheets If sht.Name = Cells(i, 3) Then sht.Visible = 0 End If Next ElseIf ActiveSheet.Cells(i, 4) = "不隐藏" Then For Each sht In Worksheets If sht.Name = Cells(i, 3) Then sht.Visible = -1 End If Next End If Next End Sub
当然,工作表事件还有很多方面的应用实例,我会在以后的文章中一一列举。 不懂的地方均可以在下方留言给我。 关注公众号,带你每日学习VBA,从枯燥机械的工作中解放双手。
|