2017-06-16 17 views
1

最初に、クレジットが期限切れのクレジットカードを提示します。これはMr.Excel.comとexceltip.comのu/Joe Wasのコードを使ってまとめられています。VBAで全体のブックを検索し、結果を別のワークシートに貼り付けます。

私は、検索ボックスに入力された値を見つけるために、Excelで9枚のドキュメントを検索する検索機能を作成しようとしています。次に、それらの値をブックの最初のページに貼り付けます。

コードを変更して検索ページの適切な場所に貼り付けるにはどうすればよいですか?私は最後のループで変更しようとしました。なぜなら、それは "ランタイムエラー91.オブジェクト変数またはブロック変数が設定されていません"です。

私はそのエラーを尋ねましたが、変数は常に問題を引き起こす可能性があります。 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 = "Search"のように、作業中のシートの実際の名前に置き換えてみてください。また、名前を使用したくない場合は、ワークシート(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とセクションについて詳しく説明したい場合には、本当にたとしても動作しないので、私はそれを感謝しますIf ... Thenステートメントlol :)

+0

それで、これはうまくいきました..今はA列だけを検索しますが、A-Jを検索する必要があります。私はそれを自分で修正しようとしましたが、あなたのコードに続く問題があります。また、B18では過去でA2ではなく過去のものでなければなりません。繰り返しますが、私はそれをどのように適合させるか分かりません。それから、今は、それが見つけたものの一つのインスタンスを与えるだけです。プロジェクトの説明には、ワークブック全体に広がったパーツのデータベースがあります。誰かがどこに行って探しているのかを入力できる検索ページを作成する必要があります。その結果、すべての結果がその最初のページに表示されます。 –

+0

If Len(AddressStr)についてもお答えします。その後、元のコードにその地域のオリジナルコードを追加します。私はこのコードを探しているのを見るのに役立つかもしれません。もともとは、メッセージボックス内のすべての場所を表示します。私はそれらの場所の情報を最初のページの検索結果エリアに入れたいと思っています。 –

+0

検索シートを変更して、誰かが「私は**機器番号** X ###」と言うことができ、それを検索することができるでしょうか?彼らが探している価値を選択するオプションのように?これにより、ブック内のすべてのセルを検索するよりも高速になります。私はオプションとして各列ヘッダーと(そしてこの場合はD5)空の範囲を持つコンボボックスを想像しています。 – Dexloft

関連する問題