Как я могу заставить свой код сканировать мои данные, копировать определенные выбранные строки данных и вставлять их на другой лист?

Итак, в основном у меня есть куча данных в wksht1, которые я хочу просмотреть, чтобы выбрать все строки, которые соответствуют определенному оператору if then (см. код ниже), а затем скопировать их в pastesht. Пока у меня есть код, но он выдает ошибку в строке 20, и я не могу понять, что мне нужно исправить. Пожалуйста, помогите и заранее спасибо!

 1   Sub Try()
 2   Dim wksht1 As Worksheet, pastesht As Worksheet
 3   Dim LastRowinpastesht As Long
 4   
 5   With ThisWorkbook
 6        Set wksht1 = Sheets("AAA")
 7        Set pastesht = Sheets("PPP")
 8        LastRowinpastesht = pastesht.Cells(Rows.Count, 1).End(xlUp).Row + 1
 9    End With
10
11   With wksht1
12       Last1 = Cells(Rows.Count, "B").End(xlUp).Row
13       For p = Last1 To 1 Step -1
14       If (Cells(p, "F").Text) = "SSSS" And (Cells(p, "U").Value) <= 5 And (Cells(p, "U").Interior.ColorIndex) = xlNone Then
15       Cells(p, "A").EntireRow.Select
16       Selection.Copy
17       End If
18
19    With pastesht
20       Cells(LastRowinpastesht, 1).Paste
21       Application.CutCopyMode = False
22    End With
23       Next p
24    End With
25    End Sub

person SRoy    schedule 30.01.2014    source источник
comment
Попробуйте его квалифицировать. .Cells(LastRowinpastesht,1).Paste. Кроме того, видел некоторые ошибки. Попробуй отредактировать. :)   -  person NullDev    schedule 30.01.2014
comment
а также измените Last1 = Cells(Rows.Count, "B").End(xlUp).Row на Last1 = .Cells(.Rows.Count, "B").End(xlUp).Row и каждый оператор Cells(...) на .Cells(...)   -  person Dmitry Pavliv    schedule 30.01.2014
comment
Я пробовал оба из них, но он все еще дает мне ошибку в том же месте.   -  person SRoy    schedule 30.01.2014


Ответы (2)


Попробуй это:

Sub TryMod()

    Dim WS1 As Worksheet, PasteSht As Worksheet
    Dim PShtNRow As Long, WS1LRow As Long

    With ThisWorkbook
        Set WS1 = .Sheets("AAA")
        Set PasteSht = .Sheets("PPP")
    End With

    With WS1
        WS1LRow = .Cells(Rows.Count, "B").End(xlUp).Row
        For Iter = WS1LRow to 1 Step -1
            PShtNRow = PasteSht.Cells(PasteSht.Rows.Count, 1).End(xlUp).Row + 1
            If .Cells(Iter, "F").Value = "SSSS" And .Cells(Iter, "U").Value <= 5 And .Cells(Iter, "U").Interior.ColorIndex = xlNone Then
                .Rows(Iter).Copy PasteSht.Rows(PShtNRow)
            End If
        Next Iter
    End With

    Application.CutCopyMode = False

End Sub

Основная проблема заключается в том, что вы должны квалифицировать свои свойства и методы при использовании With. Вы не можете получить With WS1, тогда используйте только Cells. Должно быть .Cells. В противном случае Excel не будет знать, на какой лист Cells вы ссылаетесь, среди других возможных ошибок, которые могут произойти.

Далее, что касается циклов For и особенно копирования в следующую пустую строку на другом листе, вы должны не забыть поставить проверку для следующей пустой строки внутри цикла. Если вы установите его в начале, оно будет принимать только одно значение и перезаписывать строку, соответствующую этому значению, снова и снова.

Теперь все вышеперечисленное собрано очень быстро, так что будьте любезны протестировать его и сообщить нам о результатах. :)

person NullDev    schedule 30.01.2014
comment
+1 на самом деле диапазон не поддерживает свойство Paste, но ваш код решает эту проблему :) - person Dmitry Pavliv; 30.01.2014
comment
На самом деле это сработало отлично, и большое спасибо за объяснение вашего кода, чтобы я действительно мог понять, где я ошибся. Спасибо большое! - person SRoy; 30.01.2014
comment
@simoco: Я действительно не понимаю эту бессмысленную часть об объектах Range. Я имею в виду, из многих вещей, правда, Microsoft? :D Спасибо, ОП. Удачи. :) - person NullDev; 30.01.2014

объект диапазона не поддерживает использование Paste

замените ошибочную строку на Cells(LastRowinpastesht, 1).PasteSpecial xlPasteAll

это должно прояснить это. Также есть другие ошибки, которые нужно проверить, просто к сведению, я не думаю, что Last1 когда-либо было объявлено где-либо с самого начала.

person user1759942    schedule 30.01.2014