Я пытаюсь скопировать определенные столбцы подряд в другой лист Excel, основываясь на том, что он соответствует двум критериям - PullRequest
0 голосов
/ 29 октября 2019

Попытка скопировать определенные столбцы в строке на другой лист Excel на основе его соответствия определенным критериям.

Никогда не делала этого раньше и пыталась скопировать то, что сделали другие, но постоянно говорит мне ошибку.

Учебники YouTube

Private Sub CommandButton1_Click()
    a = Worksheets("Salesman Quotes Active").Cells(Rows.Count, 1).End(xlUp).Row

    For i = 3 To 65
        If Worksheets("Salesman Quotes Active").Cells(i, 10).Value = "Warm 2020" Then Worksheets("Salesman Quotes Active").Range(Cells(i, 1), Cells(i, 2), Cells(i, 8), Cells(i, 10)).Copy
        Worksheets("2020 Monetary vs Date anlalysis").Activate
        b = Worksheets("Salesman Quotes Active").Cells(Rows.Count, 1).End(xlUp).Row
        Worksheets("2020 Monetary vs Date analysis").Cells(b + 1, 1).Select
        ActiveSheet.Paste
        Worksheets("Salesman Quotes Active").Activate
    Next

    Application.CutCopyMode = False
    ThisWorkbook.Worksheets("Salesmans Quotes Active").Cells(1, 1).Select
End Sub

Ошибка времени выполнения "450" ​​

Ответы [ 2 ]

0 голосов
/ 29 октября 2019

В соответствии с тем, что я понимаю из вашего вопроса, попробуйте следующее:

Private Sub CommandButton1_Click()
Dim i as Long
Dim b as Long
Dim ws1 as WorkSheet
Dim ws2 as WorkSheet
Set ws1 = Worksheets("Salesman Quotes Active")
Set ws2 = Worksheets("2020 Monetary vs Date anlalysis")

For i = 3 To 65
    If ws1.Cells(i, 10).Value = "Warm 2020" Then 
        b = ws1.Cells(Rows.Count, 1).End(xlUp).Row
        ws2.Cells(b + 1, 1).Value = ws1.Cells(i, 1).Value
        ws2.Cells(b + 1, 2).Value = ws1.Cells(i, 2).Value
        ws2.Cells(b + 1, 3).Value = ws1.Cells(i, 8).Value
        ws2.Cells(b + 1, 4).Value = ws1.Cells(i, 10).Value
    End If
Next
Application.CutCopyMode = False
End Sub

Если требуется какая-либо модификация, просто дайте мне знать. Надеюсь, это поможет!

0 голосов
/ 29 октября 2019

Первая проблема заключается в том, что свойство Worksheet.Range может принимать только 2 параметра, но вы попытались передать 4:

Worksheets("Salesman Quotes Active").Range(Cells(i, 1), Cells(i, 2), Cells(i, 8), Cells(i, 10)).Copy

Таким образом, необходимо либо скопировать ячейку за ячейкой, либо использовать Метод Application.Union :

With Worksheets("Salesman Quotes Active")
    Union(.Cells(i, 1), .Cells(i, 2), .Cells(i, 8), .Cells(i, 10)).Copy
End With

Вторая проблема заключается в том, что ваш объект Range() указан в определенной рабочей таблице Worksheets("Salesman Quotes Active").Range(…), но ваш Cells()объекты не указываются в том же рабочем листе, что и объект Range(), и это также может привести к ошибке.
Всегда указывает, в каком листе находится объект Range или Cells.

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