2016-04-27 7 views
-1

私はVBAを練習しています。私は自分のコードにいくつかの助けと訂正が必要です。 この作業では、コンボボックスから選択した値のワークシートを検索する検索ツールを作成しています。それぞれの結果が最初のページに表示されます。.FindとOffsetを使用してVBAコードをデバッグする方法は?

問題:私は範囲rFound.Find方法を定義されたコードで

  1. 。各ワークシートで、検索された値は列Dにあります。列BからEに行をコピーしたいと思います。私はどのようにオフセットを使ってその範囲を選択しようとしたのですが、エラーが発生するかどうか試してみました。なぜ、どのように修正するのですか?

  2. 結果を貼り付ける(リストする)ときは、最初のページの3行目の列Kから開始します。コードを実行すると、正しいターゲットが選択されますが、何も貼り付けられません。これを修正するには?

私はまた、各検索結果の後にドキュメントヘッダーをコピーするには、いくつかの試みを作ったが、私はそれらをコメントアウト、getOwnerで行を無視してください。

Dim ws As Worksheet, OutputWs As Worksheet, wsLists As Worksheet 
Dim rFound As Range ', getOwner As Range 
Dim strName As String 
Dim count As Long, LastRow As Long 
Dim IsValueFound As Boolean 
'Dim cboSelectName As ComboBox 
Dim a As String 


IsValueFound = False 
Set OutputWs = Worksheets("Teszt") '---->change the sheet name as required 
LastRow = OutputWs.Cells(Rows.count, "A").End(xlUp).Row 
Set wsLists = Worksheets("Lists") 

a = ComboBox1.Value 

On Error Resume Next 
strName = a 
If strName = "" Then Exit Sub 
For Each ws In Worksheets 
    If ws.Name <> "Output" Then 
     With ws.UsedRange 
      Set rFound = .Find(What:=strName, After:=.Cells(1, 1), LookIn:=xlValues, LookAt:=xlWhole) 
      If Not rFound Is Nothing Then 
       Application.Goto rFound, True 
       IsValueFound = True 
       'MsgBox rFound.Row 
       rFound.EntireRow.Copy 
       'Rfound keres - rFound.Range(rFound(Offset(-2,")),rFound.Offset(1,"")).Copy ' ---> This is a suggestion 
       OutputWs.Cells(LastRow + 2, 11).PasteSpecial xlPasteAll 
       'getOwner.Range(K2, R2).Copy  ' attempt to copy the header for each search result 
       'getOwner.Cells(LastRow + 1, 6).Paste 
       Application.CutCopyMode = False 
       LastRow = LastRow + 1 
      End If 
     End With 
    End If 
Next ws 
On Error GoTo 0 
If IsValueFound Then 
    OutputWs.Select 
    MsgBox "Search Complete!" 
Else 
    MsgBox "Value not found" 
End If 
+0

どこにコピーしているのかよくわからないが、 'rFound'の行の' B:E'を 'OutputWs'の' K'列にコピーすると、 'Application.Intersect(rFound.EntireRow 、rFound.Worksheet.Range( "B:E"))。OutputWs.Cells(LastRow + 2、 "K")をコピーします。 OutputWs.Cells(LastRow + 2、 "K")をコピーしてください。rFound.Worksheet.Range(rFound.EntireRow.Cells(1、 "B")、rFound.EntireRow.Cells(1、 "E"))または 'rFound.EntireRow.Cells(1、" B ")。Resize(1,4).Copy OutputWs.Cells(LastRow + 2、" K ")'。 – GSerg

+0

最後の1つが動作しています rFound.EntireRow.Cells(1、 "B")。サイズ変更(1、4).Copy 残念なことに検索はできません...コードがドロップダウンを検索しない理由を教えてくださいリストの値?私のExcelシートでは、各ワークシート上で発生するすべての名前をリストしたいので、これらの名前はドロップダウンリストから選択します。私はシート2の各行に4つの同じ名前のような例を作った。コードを実行すると、最初の結果しか表示されない。何故ですか? –

+0

彼らはすべて働いており、まったく同じことをしています。 – GSerg

答えて

0

あなたは選択行全体ですが、あなたは、行全体をコピーする場合、あなたはそれが機能しない理由の列Aにそれをのみコピーすることができ、列K.にそれを貼り付けています。だから私はあなたがオフセット部分で作業することをお勧めします。 オフセットでは、最初の部分は行で、2番目の部分は列です。 あなたは、

Dim sth as Range 
set sth = .range(.rfound.offset(0,-2),.rfound.offset(0,1)).copy 

をそのような何かを行うことができますしかし、私はそれを確認していません。それほど良くはありません。

関連する問題