2017-06-16 144 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

相关问题