Копировать данные в лист, если ячейка = значение, работает только иногда? - PullRequest
0 голосов
/ 19 апреля 2019

Если ячейка в столбце E = "Y", то я хочу скопировать всю строку этой ячейки на лист 2 и сделать это для каждого рабочего листа в книге, кроме листа 2.

Вот код, который я пробовал.

Sub Macro1()
Dim lastrow As Long
Dim cpyrow As String
Dim ws As Worksheet

For Each ws In ThisWorkbook.Worksheets
    If ws.Name <> "Sheet2" Then
    For Each cell In Range("E:E")
        If cell.Value = "Y" Then
            lastrow = Sheets("Sheet2").Cells(Rows.Count, "A").End(xlUp).Row + 1
            cpyrow = cell.Row & ":" & cell.Row
            ws.Range(cpyrow).Copy Destination:=Sheets("Sheet2").Range("A" & lastrow)
        End If
        Next cell
    End If
    Next ws
End Sub

Иногда он копирует правильную строку, но в других случаях он копирует строки, чья ячейка в столбце E не равна "Y", или пропускает строки, которые это делают. Кроме того, почему это дает разные результаты, когда я запускаю его, когда я нахожусь на разных листах? Разве он не должен работать одинаково и проходить через каждый лист?

Ответы [ 2 ]

1 голос
/ 19 апреля 2019

заменить:

For Each cell In Range("E:E")

на:

For Each cell In ws.Range("E:E")

(возможны другие ошибки)

1 голос
/ 19 апреля 2019

Вы пропустили ссылку на родительский лист в цикле:

For Each cell In Range("E:E")

Должно быть

For Each cell In ws.Range("E:E")

В противном случае вы проверяете активный лист, но копируете правильный лист в этом ряду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...