2016-04-27 163 views
-1

我正在練習VBA,我需要一些幫助/更正我的代碼。 在這個任務中,我創建了一個搜索工具,它從組合框中查找每個工作表中的選定值。每個結果都列在第一頁上。如何使用.Find和Offset調試VBA代碼?

問題:

  1. 在代碼我在一定範圍rFound定義的.Find方法。在每個工作表上,搜索值位於列D。我想將B列中的行復制到E。我評論過一次嘗試,我是如何嘗試選擇該範圍的,並使用偏移量,但我收到錯誤消息。爲什麼以及如何解決這個問題?

  2. 當我想粘貼(列表)結果我希望它從第1頁第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」)'。或者'rFound.Worksheet.Range(rFound.EntireRow.Cells(1,「B」),rFound.EntireRow.Cells(1,「E」))複製OutputWs.Cells(LastRow + 2,「K」)'。或'rFound.EntireRow.Cells(1,「B」)。Resize(1,4).Copy OutputWs.Cells(LastRow + 2,「K」)'。 – GSerg

+0

最後一個工作 rFound.EntireRow.Cells(1,「B」)。Resize(1,4).Copy 不幸的是,搜索不是...你能說出爲什麼代碼不搜索下拉列表值?在我的Excel表中,我想列出每個工作表上出現的所有名稱,並從下拉列表中選擇這些名稱。我在第2頁的每一行中創建了一個像4個相同名稱的示例。當我運行代碼時,它只顯示第一個結果。這是爲什麼? –

+0

他們都在工作,完全一樣。 – GSerg

回答

0

您是選擇整行,但您將其粘貼到列K.如果複製整個行,你只能把它複製到A列。這就是爲什麼它不工作。所以我建議你在Offset部分工作。 在偏移量中,第一部分是行,第二部分是列。 你可以這樣做,

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

但我不確定。不是很好。