技术 · 2023 年 9 月 2 日

在Excel里搜索隐藏工作表中的内容

在Excel中,如果你隐藏了很多工作表,并且想找出其中含有指定内容的工作表,你需要使用VBA (Visual Basic for Applications) 来达到这个目的。以下是步骤和一段VBA代码,可以帮助你查找隐藏的工作表中的特定内容:

  1. 开启开发者工具:
    • 如果你还没在Excel里开启“开发者”选项卡,首先要做的是在“文件” -> “选项” -> “自定义功能区” -> 勾选“开发者”。
  2. 使用VBA代码:
    • 在“开发者”选项卡点击“Visual Basic”,打开VBA编辑器。
    • 在左侧的项目窗格中,右键你的工作簿(例如VBAProject (YourWorkbookName.xlsx)) -> 插入 -> 模块。
    • 在新模块的代码窗口中,复制并粘贴以下代码:
Sub SearchHiddenSheets()

    Dim ws As Worksheet
    Dim rng As Range
    Dim SearchStr As String
    Dim Found As Boolean
    
    Found = False
    SearchStr = InputBox("请输入你要搜索的内容:", "搜索隐藏的工作表")
    
    If SearchStr = "" Then Exit Sub
    
    For Each ws In ThisWorkbook.Worksheets
        If ws.Visible = xlSheetHidden Or ws.Visible = xlSheetVeryHidden Then
            Set rng = ws.UsedRange.Find(SearchStr)
            If Not rng Is Nothing Then
                MsgBox "找到内容在工作表: " & ws.Name, vbInformation, "找到了!"
                Found = True
                Exit For
            End If
        End If
    Next ws
    
    If Not Found Then
        MsgBox "没有在隐藏的工作表中找到指定的内容。", vbExclamation, "未找到"
    End If

End Sub
  • 关闭VBA编辑器。

此时,这个宏会搜索所有隐藏的工作表,并告诉你在哪个隐藏的工作表中找到了指定内容。如果它找不到任何内容,也会提示你。

下面的代码,则增加了一个步骤,就是自动“取消隐藏”找到了内容的隐藏工作表。

Sub SearchAndUnhideSheet()

    Dim ws As Worksheet
    Dim rng As Range
    Dim SearchStr As String
    Dim Found As Boolean
    
    Found = False
    SearchStr = InputBox("请输入你要搜索的内容:", "搜索隐藏的工作表")
    
    If SearchStr = "" Then Exit Sub
    
    For Each ws In ThisWorkbook.Worksheets
        If ws.Visible = xlSheetHidden Or ws.Visible = xlSheetVeryHidden Then
            Set rng = ws.UsedRange.Find(SearchStr)
            If Not rng Is Nothing Then
                ws.Visible = xlSheetVisible
                MsgBox "找到内容在工作表: " & ws.Name & "。这个工作表已经被取消隐藏。", vbInformation, "找到了!"
                Found = True
                Exit For
            End If
        End If
    Next ws
    
    If Not Found Then
        MsgBox "没有在隐藏的工作表中找到指定的内容。", vbExclamation, "未找到"
    End If

End Sub