利用VBA实现工作表批量显示/隐藏

引言

工作表批量显示/隐藏的UI设计与功能实现,主要是为了在处理包含大量工作表的工作簿时,我们可以根据需求快速隐藏多个非必需的工作表,或者只显示少量但必要的工作表

工作表批量显示/隐藏的演示GIF

UI设计

这里主要使用到了两个列表框和两个按钮控件,主界面设计和相关控件命名如下所示。

图片
界面设计

窗体和控件

命名

窗体

UserForm1

列表框(可见工作表)

lbVisibleSheets

列表框(不可见工作表)

lbHiddenSheets

按钮(→)

cmdbHidden

按钮(←)

cmdbVisible

值得注意的是,列表框的MultiSelect属性,需设置为2-fmMultiSelectExtended。只有这样,我们才可以更灵活地通过Shift、Ctrl键选择列表框的多个项目。

设置MultiSelect属性

VBA实现代码

1.窗体初始化

加载[可见工作表]在左侧的列表框,加载[不可见工作表]在右侧的列表框。

Private Sub UserForm_Initialize()
    Dim sht As Worksheet
    For Each sht In ActiveWorkbook.Worksheets
        If sht.Visible = xlSheetVisible Then
            Me.lbVisibleSheets.AddItem (sht.Name)
        Else
            Me.lbHiddenSheets.AddItem (sht.Name)
        End If
    Next
End Sub

2.将多个工作表隐藏

Private Sub cmdbHidden_Click()
    '清空【不可见工作表】列表框
    lbHiddenSheets.Clear
    '将选中的项目设置为不可见,同时从【可见工作表】列表框移除
    For i = lbVisibleSheets.ListCount - 1 To 0 Step -1
        If lbVisibleSheets.Selected(i) And GetVisibleShtCount(ActiveWorkbook) > 1 Then
            Sheets(lbVisibleSheets.List(i)).Visible = False
            lbVisibleSheets.RemoveItem (i)
        End If
    Next
    '重新加载【不可见工作表】列表框
    Dim sht As Worksheet
        For Each sht In ActiveWorkbook.Worksheets
            If sht.Visible <> xlSheetVisible Then
                lbHiddenSheets.AddItem (sht.Name)
            End If
        Next
End Sub

3.将多个工作表显示​​​​​​​

Private Sub cmdbVisible_Click()
    '清空【可见工作表】列表框
    lbVisibleSheets.Clear
    '将选中的项目设置为可见,同时从【不可见工作表】列表框移除
    For i = lbHiddenSheets.ListCount - 1 To 0 Step -1
        If lbHiddenSheets.Selected(i) Then
            Sheets(lbHiddenSheets.List(i)).Visible = True
            lbHiddenSheets.RemoveItem (i)
        End If
    Next
    '重新加载【可见工作表】列表框
    Dim sht As Worksheet
        For Each sht In ActiveWorkbook.Worksheets
            If sht.Visible = xlSheetVisible Then
                lbVisibleSheets.AddItem (sht.Name)
            End If
        Next
End Sub

4.辅助函数

功能:获取全部可见工作表的数量。

应用:只有在全部可见工作表的数量>1时,才能将可见工作表隐藏。

Function GetVisibleShtCount(ByVal wb As Workbook) As Integer
    Dim count As Integer
    count = 0
    For Each sht In wb.Sheets
        If sht.Visible = xlSheetVisible Then
            count = count + 1
        End If
    Next
    GetVisibleShtCount = count
End Function
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值