2013-05-07 128 views
2

我正在尝试使用文本框和命令按钮来搜索特定单词或值的整个工作簿。例如,“3132”或“工作说明”。到目前为止,我可以搜索我正在使用的工作表,但无法搜索工作簿的其余部分。另外,一些工作表是隐藏的。任何洞察这将是有益的,并帮助我出一吨!我在下面列出了我的正确程序:Excel VBA搜索按钮

Private Sub CommandButton6_Click() 
    Dim strFindWhat As String 
    strFindWhat = TextBox1.Text 

    On Error GoTo ErrorMessage 

    Cells.Find(What:=strFindWhat, After:=ActiveCell, LookIn:=xlFormulas, LookAt _ 
     :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ 
     False).Select 
    Exit Sub 

    ErrorMessage: 
     MsgBox ("The data you are searching for does not exist") 
End Sub 

有一个好的!

+0

下面是通过每个工作循环搜索整个工作簿的例子:http://excelvbaandmacros.blogspot.com/2011/09/search-stringvalue-in-entire-workbook.html – PowerUser 2013-05-07 15:34:18

回答

3

您需要循环访问workbook.worksheets集合中的工作表对象数组。

3

尝试类似这样的操作,它在工作簿中循环显示表格时使用FindNext方法。

Sub FindLoopSheets() 
Dim srchString$ 
Dim w As Integer 
Dim wsName As String 
Dim rng As Range 
Dim fndRange As Range 
Dim nxtRange As Range 

srchString = Application.InputBox("Enter the value to search for", "Search Query") 

If srchString = vbNullString Then 
    MsgBox "No value entered.", vbInformation 
    Exit Sub 
End If 

For w = 1 To Sheets.Count 
    With Sheets(w) 
     wsName = .Name 
     Debug.Print "Beginning search on " & wsName 

     Set rng = .Cells.Find(What:=srchString, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _ 
      xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _ 
      , SearchFormat:=False) 

     If Not rng Is Nothing Then 
      Set fndRange = rng 
      Do 
       Set nxtRange = .Cells.FindNext(After:=fndRange) 

        Debug.Print Sheets(w).Name & "!" & nxtRange.Address 
        Set fndRange = nxtRange 

      Loop Until fndRange.Address = rng.Address 

     Else: 
      Debug.Print srchString & " was not found on " & wsName 

     End If 
    End With 
Next w 

End Sub 
+0

+ 1换去额外的一英里。 – 2013-05-07 22:35:14