2017-06-16 148 views
1

首先,在信貸到期時給予貸款。這是使用來自Mr.Excel.com和exceltip.com的代碼。在VBA中搜索整個工作簿,然後將結果粘貼到另一個工作表中

現在,我已經得到了這一點的,我想創建一個搜索功能,將通過在Excel中我9頁文件搜索,發現被輸入到搜索框中的值的方式。然後將這些值粘貼到工作簿的第一頁上。

我需要什麼,在我的代碼修改,使其粘貼到搜索頁面上的正確位置?我試圖在最後一個循環中更改事物,因爲那是我得到「運行時錯誤91.對象變量或塊變量未設置」的地方。

我GOOGLE了這個錯誤,但總是變量擰我,這樣可能是問題。 The search page. This is where the Debugger stops. 這是到目前爲止我的代碼。

Sub Find_one() 
'Find Function For ERF Spreadsheet' 
'Type in Box, Press Button, Display the Results' 
    Dim ws As Worksheet, Found As Range 
    Dim myText As String, FirstAddress As String 
    Dim AddressStr As String, foundNum As Integer 

     myText = Range("D5") 

      If myText = "" Then Exit Sub 

       For Each ws In ThisWorkbook.Worksheets 
        With ws 
        'Do not search sheet1' 
         If ws.Name = "Sheet1" Then GoTo myNext 

          Set Found = .UsedRange.Find(What:=myText, LookIn:=xlValues, LookAt:=xlPart, MatchCase:=False) 

         If Not Found Is Nothing Then 
          FirstAddress = Found.Address 

         Do 
          foundNum = foundNum + 1 
          AddressStr = AddressStr & .Name & " " & Found.Address & vbCrLf 

         Set Found = .UsedRange.FindNext(Found) 

         'Found.EntireRow.Copy _ 
         'Destination:=Worksheets("Sheet4").Range("A65536").End(xlUp).Offset(1, 0) 
         Loop While Not Found Is Nothing And Found.Address <> FirstAddress 
      End If 

myNext: 
        End With 

    Next ws 

    If Len(AddressStr) Then 

      Sheet8.Range("B18") = ws.Cells(x, 1) 
      Sheet8.Range("C18") = ws.Cells(x, 2) 
      Sheet8.Range("D18") = ws.Cells(x, 3) 
      Sheet8.Range("E18") = ws.Cells(x, 4) 
      Sheet8.Range("F18") = ws.Cells(x, 5) 
      Sheet8.Range("G18") = ws.Cells(x, 6) 
      Sheet8.Range("H18") = ws.Cells(x, 7) 
      Sheet8.Range("I18") = ws.Cells(x, 8) 
      Sheet8.Range("J18") = ws.Cells(x, 9) 

    Else: 
      MsgBox "Unable to find " & myText & " in this workbook.", vbExclamation 
    End If 

End Sub 

這是最後一個循環的原代碼...

If Len(AddressStr) Then 

    MsgBox "Found: """ & myText & """ " & foundNum & " times." & vbCr & _ 
    AddressStr, vbOKOnly, myText & " found in these cells" 

Else: 

    MsgBox "Unable to find " & myText & " in this workbook.", vbExclamation 

End If 
+0

如果你試圖將圖片,看起來他們並沒有通過。 – dwirony

+0

我弄明白了。 –

+0

我認爲一個問題是,看着你的工作簿的附加圖片,你的工作表名稱是字母和「搜索」,但你參考基於「Sheet1」和「Sheet4」的工作表。嘗試用工作表(「C」)或ws.Name =「搜索」替換那些與您正在使用的工作表的實際名稱。或者,如果您不想使用他們的名字,可以使用工作表(1)或表格(4)參考他們的位置。 – Dexloft

回答

0

這裏,嘗試了這一點。我重溫了我對第一部分的解釋。我不完全確定你想要做什麼,所以讓我知道這是否有效或錯誤。

Sub FindOne() 
    Dim k As Integer 
    Dim myText As String, searchColumn As String 
    Dim totalValues As Long 
    Dim nextCell As Range 

    k = ThisWorkbook.Worksheets.Count 
    myText = Sheets(1).Range("D5").Value 

    If myText = "" Then 
     MsgBox "No Address Found" 
     Exit Sub 
    End If 

    Select Case ComboBox1.Value 
     Case "Equipment Number" 
      searchColumn = "A" 
     Case "Sequence Number" 
      searchColumn = "B" 
     Case "Repair Order Number(s)" 
      searchColumn = "D" 
     Else 
      MsgBox "Please select a value for what you are searching by." 
      End Sub 
    End Select 

    For i = 2 To k 
     totalValues = Sheets(i).Range("A65536").End(xlUp).Row 
     ReDim AddressArray(totalValues) As String 

     For j = 0 To totalValues 
      AddressArray(j) = Sheets(i).Range(searchColumn & j + 1).Value 
     Next j 

     For j = 0 To totalValues 
      If (InStr(1, AddressArray(j), myText) > 0) Then 
       Set nextCell = Sheets(1).Range("A65536").End(xlUp).Offset(1, 0) 
       Range(nextCell, nextCell.Offset(0, 8)).Value = Sheets(i).Range("A" & j, "I" & j).Value 
      End If 
     Next j 
    Next i 

End Sub 

而且我不知道是什麼代碼是第二部分應該是,所以如果你想詳細說明與If Len(AddressStr) Then的部分,我會很感激它,因爲真的不即使工作一個如果... Then語句笑:)

+0

所以它的工作類型..現在它只搜索列,但它需要搜索A-J。我試圖自己修復它,但是我無法遵循你的代碼。它也需要在B18過去而不是A2。再次,我不知道如何適應。那麼現在它也只是給出它發現的一個實例。爲了解釋這個項目,我有一個分佈在工作簿中的零件數據庫。我需要創建一個搜索頁面,讓任何人可以進入並鍵入他們正在尋找的內容,然後所有結果都會在第一頁上彈出。 –

+0

也要回答有關如果Len(AddressStr)然後,我將添加到我的原始帖子該區域的原始代碼。它也可能幫助你看到我要找的代碼。最初,它給你在消息框中的所有位置。我希望將這些位置的信息放在第一頁的搜索結果區域中。 –

+0

我們能否改變搜索表格,以便有人可以進去說「我有一個**設備編號** X ###」並且他們在搜索?就像選擇他們正在尋找什麼值的選項一樣?這將比搜索工作簿中的每個單元格更快。我在想象一個帶有每個列標題的ComboBox作爲一個選項和一個空的範圍(在這種情況下,D5)在它旁邊。 – Dexloft

相關問題