Excel 根据名称查找工作表

Posted

技术标签:

【中文标题】Excel 根据名称查找工作表【英文标题】:Excel Find a sheet based on name 【发布时间】:2014-09-02 06:47:01 【问题描述】:

这不是一个问题,而是一个解决方案,但我想在这里分享它,因为我在这里得到了我需要的帮助。

我想在活动工作簿中查找特定的 Excel 工作表,并按工作表的名称进行搜索。我建立了这个来找到它。这是一个“包含”搜索,如果找到会自动转到工作表,或者询问用户是否有多个匹配项:

要随时结束,只需在输入框中输入一个空白即可。

公共子 Find_Tab_Search() Dim sSearch 作为字符串 sSearch = "" sSearch = InputBox("输入搜索", "查找标签") If Trim(sSearch) = "" Then Exit Sub 'MsgBox (sSearch) 将 sSheets() 调暗为字符串 将 sMatchMessage 调暗为字符串 将 iWorksheets 调暗为整数 将 iCounter 调暗为整数 将 iMatches 调暗为整数 将 iMatch 调暗为整数 Dim sGet As String 将 sPrompt 变暗为字符串 iMatch = -1 iMatch = 0 sMatchMessage = "" iWorksheets = Application.ActiveWorkbook.Sheets.Count ReDim 工作表(iWorksheets) '将名字列表放入数组 对于 iCounter = 1 到 iWorksheets sSheets(iCounter) = Application.ActiveWorkbook.Sheets(iCounter).Name 如果 InStr(1, sSheets(iCounter), sSearch, vbTextCompare) > 0 那么 iMatches = iMatches + 1 如果 iMatch = -1 那么 iMatch = iCounter sMatchMessage = sMatchMessage + CStr(iCounter) + ":" + sSheets(iCounter) + vbCrLf 万一 下一个 iCounter 选择案例 iMatch 案例 0 '无匹配 MsgBox "没有找到匹配" + sSearch 情况1 '1 匹配激活工作表 Application.ActiveWorkbook.Sheets(iMatch).Activate 其他情况 '超过 1 场比赛。问他们去哪张纸 sGet = -1 sPrompt = "找到多个匹配项。请输入以下列表中的数字" sPrompt = sPrompt + "显示工作表" + vbCrLf + vbCrLf + sMatchMessage sPrompt = sPrompt + vbCrLf + vbCrLf + "输入空白取消" sGet = InputBox(sPrompt, "请选择一个") If Trim(sGet) = "" Then Exit Sub sPrompt = "值必须是数字" + vbCrLf + vbCrLf + sPrompt IsNumeric(sGet) = False sGet = InputBox(sPrompt, "请选择一个") If Trim(sGet) = "" Then Exit Sub 环形 iMatch = CInt(sGet) Application.ActiveWorkbook.Sheets(iMatch).Activate 结束选择 结束子

我希望有人觉得这很有用,也欢迎提出改进建议。

【问题讨论】:

欢迎来到 Stack Overflow!感谢您与社区分享此解决方案。您可以通过选中“提出问题”屏幕底部的“回答您自己的问题”框来提出问题并同时发布答案。我建议将您的答案转化为实际答案,然后将问题重写为答案所解决的问题。 请您将其作为一个问题重新执行,然后回答您自己的问题...这将符合 SO 的格式。话虽如此,欢迎您,并感谢您添加有用的内容。 @Brian,仅供参考,低代表用户无法回答自己的问题。 @Sifu 谢谢,我没有意识到这一点。根据 ***.com/help/self-answer,OP 需要至少 15 个代表来回答他们自己的问题。这意味着 OP 现在已经足够了,因为三个赞成票。 【参考方案1】:

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

使用Filter 下的范围名称、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

【讨论】:

以上是关于Excel 根据名称查找工作表的主要内容,如果未能解决你的问题,请参考以下文章

Excel - UDF 函数,用于根据条件从多个工作表中获取 SUM 值

excel跨表格引用遇到的两个问题?

如何在excel一个工作表中的一大堆数据中找一部分自己需要的数据

Excel 根据单元格值复制到特定工作表

如何根据当前日期使用 python Pandas 从 Excel 工作表加载特定工作簿

在不知道工作表名称的情况下使用 SSIS 从 Excel 导入数据