首页 > 解决方案 > 仅在 ComboBox 中显示可见工作表

问题描述

我创建了以下 Excel 电子表格:

      A      B         C         D         E
1   Sheet1
2   Sheet2
3   Sheet5
4   Sheet6
5   Sheet8
6   Sheet9
7

如您所见,Column A我在 Excel 文件中列出了一些工作表。

现在,我使用下面的 VBA 将此列表放入 ComboBox:

Sub UserForm_Activate()
  ComboBox1.List = Sheet1.Range("A1:A8").Value
End Sub

到目前为止,这一切都很好。


但是,现在可能会发生某些工作表不可见的情况。因此,我也不希望它们出现在ComboBox.

我找到的一个解决方案是来自这里的答案。但是,此 VBA 仅适用于整个 Excel 文件,但正如您在我上面的列表中所见,某些工作表 ( Sheet3, Sheet4, Sheet7) 已从列表中排除。无论它们是否可见,这些工作表也应保持排除在外。

因此,例如,当我使ComboBoxSheet2Sheet6的列表不可见时,应自动调整并如下所示:

Sheet1
Sheet5
Sheet8
Sheet9

我需要在我的 VBA 中进行哪些更改才能实现此目的?

标签: excelvbacombobox

解决方案


基于链接的主题,我修改了答案中的代码以达到您想要实现的目标

Private Sub ChangeComboBox()
    Dim xSheet As Worksheet

    ' Clear the combobox
    ComboBox1.Clear

    ' Add the sheets again
    For Each xSheet In ThisWorkbook.Sheets
        '~~> Check if they are visible
        If xSheet.Visible = xlSheetVisible Then
            If xSheet.Name <> Sheet3.Name And xSheet.Name <> Sheet4.Name And xSheet.Name <> Sheet7.Name Then
                ComboBox1.AddItem xSheet.Name
            End If
        End If
    Next
End Sub

推荐阅读