这不是一个问题,而只是一个解决方案,但我想在这里分享它,因为我在这里需要的东西得到了帮助。
我想在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/