【问题标题】:List hidden worksheets列出隐藏的工作表
【发布时间】:2014-12-20 18:17:46
【问题描述】:

我正在创建一个材料寄存器

由于规定,当一种材料(每种材料都有自己的工作表,最后添加一个 3 位随机数以允许多次使用相同的名称)被删除时,它实际上不能被删除,所以为了解决这个问题,我的工作簿隐藏了工作表并在摘要页面上使用删除检查隐藏相应的行。

但是我正在努力的是恢复工作表的功能,

我有执行此操作所需的代码,但是我找不到任何功能来列出隐藏的工作表

这个列表可以放在工作簿的隐藏列中,这样我就可以用我的宏引用它,但正如我所说,我无论如何都找不到只列出隐藏的工作表。

感谢您的帮助

【问题讨论】:

  • 如果您有代码,请在您的问题中显示。另外,这似乎是Excel,对吧?请适当地标记问题。

标签: excel vba


【解决方案1】:

您可以添加到执行隐藏的代码中,以将其隐藏的工作表的名称写入您的其他隐藏选项卡,并将反向添加到取消隐藏它的代码中。

不确定以下是否适用于您的情况,但您也可以在工作表事件中添加一些代码,以便在工作表变得不可见时捕获

Private Sub Worksheet_Deactivate()
    If Me.Visible = xlSheetHidden Then MsgBox "I have been hidden"
End Sub

【讨论】:

  • 以防万一它不明显,我已经在其中放置了 msgbox 进行测试,您可以将其替换为代码以将工作表名称保存在某处供您使用
  • 这实际上可以工作,这是我目前要删除的代码。
  • Sub HideSheet() Cells(1, 10).Value2 = "D" Dim sheet As Worksheet Set sheet = ActiveSheet sheet.Visible = xlSheetHidden If Me.Visible = xlSheetHidden Then End Sub
    这是代码,但考虑您的解决方案意味着列表将填充我不想要的工作表名称。我可能想出了另一种解决方案,但是我需要一些代码帮助。如何消除组合框中的空白?我找到了一种方法,使用 IF 来获取已删除工作表的列表,我可以引用一个名称,但这意味着我的列表如果充满了“”。
  • 查询任何类似变量的几种方法是: 1. 如果 len() > 0 then .... 2. if '' then .... 我倾向于使用方法 1,尽管这与其他任何方法一样多是个人偏好。因此,在决定如何处理它们之前,请先询问组合框的元素
【解决方案2】:

这有帮助吗..

' Function to be used in array formula on sheet to list hidden sheets
Public Function ListHiddenSheets()
    Dim hiddenSheets As New dictionary

    Dim sheet As Worksheet
    For Each sheet In Worksheets
        If sheet.Visible <> xlSheetVisible Then hiddenSheets.Add sheet.Name, Null
    Next sheet

    Dim vRes() As Variant
    ReDim vRes(0 To hiddenSheets.Count, 0 To 0)

    Dim idx As Integer
    For idx = 0 To hiddenSheets.Count - 1
        vRes(idx, 0) = hiddenSheets.keys(idx)
    Next idx

    ListHiddenSheets = vRes
End Function

?

【讨论】:

    【解决方案3】:

    隐藏的工作表可以是 HiddenVeryHidden,以捕获这些:

    ub ListEm()
    Dim ws As Worksheet
    Dim StrHid As String
    Dim strVHid As String
    For Each ws In ActiveWorkbook.Worksheets
    Select Case ws.Visible
        Case xlSheetVisible
        Case xlSheetHidden
        StrHid = StrHid & ws.Name & vbNewLine
        Case Else
        strVHid = strVHid & ws.Name & vbNewLine
        End Select
    Next
    If Len(StrHid) > 0 Then MsgBox StrHid, vbOKCancel, "Hidden Sheets"
    If Len(strVHid) > 0 Then MsgBox strVHid, vbOKCancel, "Very Hidden Sheets"
    End Sub
    

    【讨论】:

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