2017-07-20 22 views
0

我期待使用能夠搜索該表中的列的marco,並且如果發現某些文本 - 在我的情況下單詞「FAIL」 - 複製整行數據/格式並將其粘貼到另一張表單中 - 我的情況 - 以及包含該特定文本的任何其他行。Excel:如果它包含某些文本到另一個工作表(VBA)時如何複製一行

pic1 pic2

我一直在使用這個代碼,但它只是複製粘貼,然後一行停止,而不是去通過,並複製任何行「FAIL」

Sub Test() 
For Each Cell In Sheets(1).Range("H:H") 
    If Cell.Value = "FAIL" Then 
    matchRow = Cell.Row 
    Rows(matchRow & ":" & matchRow).Select 
    Rows(matchRow & ":" & matchRow).Select 
    Selection.Copy 

    Sheets(4).Select 
    ActiveSheet.Rows(matchRow).Select 
    ActiveSheet.Paste 
    Sheets(4).Select 
    End If 
Next 
End Sub 

第一柱和全新對VBA如此太模糊不清道歉。

+0

通過https://stackoverflow.com/q/10714251/11683走向將解決你的問題。 – GSerg

+0

更多鏈接給你:[永不假設的工作表](https://stackoverflow.com/documentation/excel-vba/1107/vba-best-practices/9218/never-assume-the-worksheet#t=201707200839270059847)。問題是,在第一次「失敗」之後,你**從「表格(4)」中取得**數據。您可以通過調試代碼來找到該錯誤:將文本光標放入代碼中,然後按F8逐行運行它。更改將立即顯示在您的工作表中。 –

回答

0

嘗試下面的代碼(代碼註釋中說明):

Option Explicit 

Sub Test() 

Dim Cell As Range 

With Sheets(1) 
    ' loop column H untill last cell with value (not entire column) 
    For Each Cell In .Range("H1:H" & .Cells(.Rows.Count, "H").End(xlUp).Row) 
     If Cell.Value = "FAIL" Then 
      ' Copy>>Paste in 1-line (no need to use Select) 
      .Rows(Cell.Row).Copy Destination:=Sheets(4).Rows(Cell.Row) 
     End If 
    Next Cell 
End With 

End Sub 
0

嘗試這樣的:

Option Explicit 

Sub TestMe() 

    Dim Cell As Range 
    Dim matchRow As Long 

    With Worksheets(1)  
     For Each Cell In .Range("H:H") 
      If Cell.Value = "FAIL" Then 
       matchRow = .Cell.Row 
       .Rows(matchRow & ":" & matchRow).Select 
       .Rows(matchRow & ":" & matchRow).Select 
       Selection.Copy   
       Worksheets(4).Select 
       Worksheets(4).Rows(matchRow).Select 
       Worksheets(4).Paste 
       .Select 
      End If 
     Next   
    End With 
End Sub 

在你的代碼的問題是,你不正確引用的工作表所有的時間。因此它不能正常工作。

作爲第2步,您可以嘗試避免代碼中的所有選擇,這是避免在Excel VBA中使用選擇或激活的最佳做法。

+2

如果.Cell.Value =「FAIL」,我收到一個錯誤「對象不支持此屬性或方法」,然後 – Hufflegigans

+0

這是因爲您使用的命名(因此我也在使用)。不要將變量命名爲「Cell」,因爲它可能與Object'Cell'混淆,因爲名稱相同。現在它是固定的 - 我刪除了它之前的點。 – Vityata

相關問題