【问题标题】:Hide and unhide selected sheets in Excel using VBA使用 VBA 在 Excel 中隐藏和取消隐藏选定的工作表
【发布时间】:2012-05-14 15:11:16
【问题描述】:

问题: 我希望能够通过表单隐藏和取消隐藏选定的(多个)工作表

可用资源: 有许多可用资源展示了如何在一张上取消隐藏和隐藏所有工作表,但不灵活

解释:

因为 sheet5 被隐藏,所以对应于 Sheet5 的复选框被选中。

逻辑/方法:

  • 获取所有工作表名称,包括隐藏的工作表并将它们绑定到标签,检查是否隐藏或取消隐藏并将其绑定到复选框。

标签和复选框是自动创建的,标签和复选框以某种方式相互链接,因此程序知道要隐藏和取消隐藏哪些工作表。

  • 编写代码以检查复选框是否在选中/未选中之间更改其状态。

【问题讨论】:

  • 你也在VB.Net/C#中做这个吗?
  • 感谢您的提问。我正在尝试在excel的VBA中做到这一点。 winform 仅用于解释目的: [1]我已经学会了如何隐藏和取消隐藏工作表。 [2] 我在自动创建标签和复选框时遇到问题
  • 您想在运行时创建所有这些控件吗?还是您想事先拥有这些控件,然后根据工作表是否可见简单地启用/禁用它们?
  • 我想在运行表单/宏时获得该列表。 [1]表格显示所有表格(最多可显示 300 张)。 [2]如果工作表取消隐藏,则选中复选框,如果是隐藏,则取消选中复选框。 [3]如果我点击选中的 - 取消隐藏,如果我点击未选中的 - 隐藏。
  • There are possible of 300sheets at max 在这种情况下,我建议使用列表框或组合框。 :)

标签: excel vba


【解决方案1】:

我终于可以完成这项工作了。这可能不是好的代码,但它可以工作。

Private Sub btListAllSheets_Click()

    With Me.ListBox1

    .Clear
    .ColumnHeads = True
    .ColumnCount = 2
    Dim status As String

    For i = 1 To Sheets.Count
        If Sheets(i).Visible = xlSheetHidden Then
           status = "Invisible"
        Else
           status = "Visible"
        End If

    ListBox1.AddItem (Sheets(i).Name)
    ListBox1.List(ListBox1.ListCount - 1, 1) = status

    Next i
    End With

End Sub

Private Sub bt_hideunhideselectedsheet_Click()

    Dim str As String
    str = Me.ListBox1.Column(1, Me.ListBox1.ListIndex)

    For Each Sh In ThisWorkbook.Worksheets

    If Sh.Name = Me.ListBox1.Value And str = "Visible" Then    
        Sh.Visible = False   
    ElseIf Sh.Name = Me.ListBox1.Value And str = "Invisible" Then    
        Sh.Visible = True
    End If

    Next Sh

End Sub

【讨论】:

    猜你喜欢
    • 2014-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多