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

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

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

公共(public)子Find_Tab_Search()
Dim sSearch作为字符串
sSearch =“”
sSearch = InputBox(“输入搜索”,“查找标签”)
如果Trim(sSearch)=“”然后退出Sub
'MsgBox(sSearch)

Dim sSheets()作为字符串
昏暗的sMatchMessage作为字符串
将iWorksheets设为整数
Dim iCounter作为整数
昏暗的iMatches作为整数
昏暗的iMatch作为整数
Dim sGet As String
暗淡提示作为字符串

iMatch = -1
iMatches = 0
sMatchMessage =“”

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

'将名称列表放入数组中
对于iCounter = 1到iWorksheets
sSheets(iCounter)= Application.ActiveWorkbook.Sheets(iCounter)。名称
如果InStr(1,sSheets(iCounter),sSearch,vbTextCompare)> 0
iMatches = iMatches + 1
如果iMatch = -1,则iMatch = iCounter
sMatchMessage = sMatchMessage + CStr(iCounter)+“:” + sSheets(iCounter)+ vbCrLf
万一
下一个iCounter

选择案例iMatches
案例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,“请选择一个”)
如果Trim(sGet)=“”然后退出Sub
sPrompt =“值必须为数字” + vbCrLf + vbCrLf + sPrompt
IsNumeric(sGet)= False时执行
sGet = InputBox(sPrompt,“请选择一个”)
如果Trim(sGet)=“”然后退出Sub
环形
iMatch = CInt(sGet)
Application.ActiveWorkbook.Sheets(iMatch).Activate
结束选择

结束子

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

最佳答案

为了好玩,尝试使用循环尽可能少地执行此操作

在已利用的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根据名称查找工作表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24701179/

10-10 15:07