引言
工作表批量显示/隐藏的UI设计与功能实现,主要是为了在处理包含大量工作表的工作簿时,我们可以根据需求快速隐藏多个非必需的工作表,或者只显示少量但必要的工作表。
UI设计
这里主要使用到了两个列表框和两个按钮控件,主界面设计和相关控件命名如下所示。
窗体和控件 | 命名 |
窗体 | UserForm1 |
列表框(可见工作表) | lbVisibleSheets |
列表框(不可见工作表) | lbHiddenSheets |
按钮(→) | cmdbHidden |
按钮(←) | cmdbVisible |
值得注意的是,列表框的MultiSelect属性,需设置为2-fmMultiSelectExtended。只有这样,我们才可以更灵活地通过Shift、Ctrl键选择列表框的多个项目。
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
标签:列表框,sht,批量,VBA,可见,lbHiddenSheets,End,lbVisibleSheets,隐藏
From: https://blog.csdn.net/VBAMatrix/article/details/143231652