分享

Excel vba工作表事件【实现快速自动隐藏工作表】

 VBA说 2020-04-07
工作表事件实现快速自动隐藏工作表

前两天有个朋友咨询我,在下面的表格中,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

当然,工作表事件还有很多方面的应用实例,我会在以后的文章中一一列举。

END

不懂的地方均可以在下方留言给我。

关注公众号,带你每日学习VBA,从枯燥机械的工作中解放双手。

每天学点excel vba

一个干货满满的公众号,期待你的关注

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多