VBA复制粘贴代码仅返回指定条件的第一次命中

时间:2016-02-08 12:19:11

标签: excel vba excel-vba

我正在尝试使用条件将行从一个Excel工作表复制到另一个工作表。所需的结果:VBA代码找到所有匹配项并将它们不带空格地粘贴到表中。当用户更改条件并点击运行时,将删除所有旧结果并显示新的列表匹配条件。

我有以下代码。当我运行它时,只显示符合条件的第一条记录。救命!我做错了什么?!

'Module to search all Wards' records that match a Ward name specified in the drop-down menu

Sub findward()
Dim wardname As String
Dim finalrow As Integer
Dim i As Integer 

Sheets("Ward_rank_table").Range("B7:BC157").ClearContents
wardname = Sheets("Ward_rank_table").Range("B3").Value
finalrow = Sheets("Ward_rank_set").Range("B160").End(xlUp).Row

Sheets("Ward_rank_set").Select
For i = 2 To finalrow
    If Cells(i, 2) = wardname Then
    Range(Cells(i, 2), Cells(i, 55)).Copy
    Sheets("Ward_rank_table").Select
    Range("B7").End(xlUp).Offset(1, 0).Resize(1, 55).PasteSpecial xlPasteFormulasAndNumberFormats

    End If


Next i

Range("B3").Select



End Sub

2 个答案:

答案 0 :(得分:0)

尝试: 片材( “Ward_rank_set”)。选择 finalrow = ActiveSheet.UsedRange.Rows.count

答案 1 :(得分:0)

问题是你使用的选择相当令人毛骨悚然,因此一旦你做了第一个副本,你就留在“Ward_rank_table”并继续搜索它。可能没有任何东西,因此它找不到任何东西。 一个工作代码(和一个非常糟糕的做法)将是:

Sheets("Ward_rank_set").Select
For i = 2 To finalrow
    If Cells(i, 2) = wardname Then
        Range(Cells(i, 2), Cells(i, 55)).Copy
        Sheets("Ward_rank_table").Select
        Range("B7").End(xlUp).Offset(1, 0).Resize(1, 55).PasteSpecial xlPasteFormulasAndNumberFormats

    End If

    Sheets("Ward_rank_set").Select
Next i

通常 - 避免在VBA中使用SELECT和ACTIVATE。尽可能多。