当前位置: 首页 > 知识库问答 >
问题:

Excel查找基于名称的工作表

仉高昂
2023-03-14
Public Sub Find_Tab_Search()
    Dim sSearch As String
    sSearch = ""
    sSearch = InputBox("Enter Search", "Find Tab")
    If Trim(sSearch) = "" Then Exit Sub
    'MsgBox (sSearch)

    Dim sSheets() As String
    Dim sMatchMessage As String
    Dim iWorksheets As Integer
    Dim iCounter As Integer
    Dim iMatches As Integer
    Dim iMatch As Integer
    Dim sGet As String
    Dim sPrompt As String

    iMatch = -1
    iMatches = 0
    sMatchMessage = ""

    iWorksheets = Application.ActiveWorkbook.Sheets.Count
    ReDim sSheets(iWorksheets)

    'Put list of names in array
    For iCounter = 1 To iWorksheets
        sSheets(iCounter) = Application.ActiveWorkbook.Sheets(iCounter).Name
        If InStr(1, sSheets(iCounter), sSearch, vbTextCompare) > 0 Then
            iMatches = iMatches + 1
            If iMatch = -1 Then iMatch = iCounter
            sMatchMessage = sMatchMessage + CStr(iCounter) + ": " + sSheets(iCounter) + vbCrLf
        End If
    Next iCounter

    Select Case iMatches
        Case 0
            'No Matches
            MsgBox "No Match Found for " + sSearch
        Case 1
            '1 match activate the sheet
            Application.ActiveWorkbook.Sheets(iMatch).Activate
        Case Else
            'More than 1 match. Ask them which sheet to go to
            sGet = -1
            sPrompt = "More than one match found. Please enter number from following list"
            sPrompt = sPrompt + "to display the sheet" + vbCrLf + vbCrLf + sMatchMessage
            sPrompt = sPrompt + vbCrLf + vbCrLf + "Enter blank to cancel"
            sGet = InputBox(sPrompt, "Please select one")
            If Trim(sGet) = "" Then Exit Sub
            sPrompt = "Value must be a number" + vbCrLf + vbCrLf + sPrompt
            Do While IsNumeric(sGet) = False
                sGet = InputBox(sPrompt, "Please select one")
                If Trim(sGet) = "" Then Exit Sub
            Loop
            iMatch = CInt(sGet)
            Application.ActiveWorkbook.Sheets(iMatch).Activate
    End Select

End Sub

共有1个答案

丘友樵
2023-03-14

为了好玩,我尝试用尽可能少的循环行来实现这一点

在Utilizedfilter下使用范围名称、xlm和VBS,以提供与上面相同的多页搜索功能

代码的大部分涉及纸张选择部分

Sub GetNAmes()
Dim strIn As String
Dim X

strIn = Application.InputBox("Search string", "Enter string to find", ActiveSheet.Name, , , , , 2)
If strIn = "False" Then Exit Sub

ActiveWorkbook.Names.Add "shtNames", "=RIGHT(GET.WORKBOOK(1),LEN(GET.WORKBOOK(1))-FIND(""]"",GET.WORKBOOK(1)))"
X = Filter([index(shtNames,)], strIn, True, 1)

Select Case UBound(X)
    Case Is > 0
        strIn = Application.InputBox(Join(X, Chr(10)), "Multiple matches found - type position to select", , , , , 1)
        If strIn = "False" Then Exit Sub
        On Error Resume Next
        Sheets(CStr(X(strIn))).Activate
        On Error GoTo 0
    Case 0
        Sheets(X(0)).Activate
    Case Else
        MsgBox "No match"
End Select

End Sub
 类似资料:
  • 问题内容: 在Java中,我们使用以下程序包以编程方式创建excel文档: 如果尝试设置工作表的名称(不是文件,而是内部Excel工作表),则在以下情况下会出现错误: 名称超过31个字符 名称包含以下任何字符:/ \ *?[] 但是,在创建具有以下工作表名称的文档后: @#$%&()+〜`“’:;,。| 没有错误输出,并且在Java中一切正常。当您在Office 2003中打开excel文件时,它

  • 本文向大家介绍excel-vba 检索活动工作簿中的所有工作表名称,包括了excel-vba 检索活动工作簿中的所有工作表名称的使用技巧和注意事项,需要的朋友参考一下 示例            

  • 问题内容: MySQL具有方便的功能: 这可用于为应用程序创建简单但非常具体的基于名称的锁。但是,它需要数据库连接。 我有很多情况,例如: 简单地同步此方法是没有意义的,因为,例如,如果在此期间同时为用户B调用了此方法,则用户B无需等待用户A完成操作就可以开始操作,而只需为用户进行操作A和功能X的组合需要等待。 使用MySql锁,我可以执行以下操作: 由于Java锁定基于对象,因此似乎需要创建一个

  • 在谷歌表单中,我有一个脚本,用于为提交的每个谷歌表单创建一个新表单。它应该基于最后一列G列(不是表单提交列)创建一个名为的新工作表。然后,它从最后一行和标题行获取信息,并将其复制到所创建工作表的前两行。它还将公式添加到单元格中,以将信息放入列中(转置),并根据创建的工作表对其进行格式化。 现在它正在创建工作表并复制公式和格式,但没有给它正确的名称或提取最后一行信息。 请帮忙~查尔斯 我复制了以下代

  • 下面的代码用于获取excel文件(.xlsx)的工作表名称 上面的代码存在的问题是,为一个9MB大小的文件创建需要占用大量内存(~700MB)&时间很长(5-6s)。即使将设置为也不会释放占用的内存(我知道可能被调用,也可能不被调用&JVM不会仅仅因为我将变量设置为null而释放内存) 我确实浏览了Workbook,XSSFWorkbook&根据我的理解,没有任何方法可以帮助我获得内存印记较低的工