Кажется, что ссылки на ячейки в моем диапазоне не работают - PullRequest
0 голосов
/ 26 апреля 2019

На основе текста («SNV»), присутствующего в столбце L рабочего листа «HiddenSheet», я хотел бы выбрать и скопировать ячейки в столбцах с 1 по 6 для всех строк, для которых текст «SNV» присутствует в столбце L.

Затем я хотел бы вставить значения скопированных ячеек в таблицу SNVReports.

У меня есть код ниже:

Sub Macro2()

a = Worksheets("HiddenSheet").Cells(Rows.Count, 1).End(xlUp).Row

For i = 1 To a

If Worksheets("HiddenSheet").Cells(i, 12).Value = "SNV" Then

    Worksheets("HiddenSheet").Range(Cells(i, 1), Cells(i, 6)).Copy
    Worksheets("SNVReports").Activate
    b = Worksheets("SNVReports").Cells(Rows.Count, 1).End(xlUp).Row
    Worksheets("SNVReports").Cells(b + 1, 1).Select
    ActiveSheet.Paste
    Worksheets("HiddenSheet").Activate

End If
Next

Application.CutCopyMode = False

End Sub

Иногда я получаю следующую ошибку: «Ошибка приложения или объекта»

и это, по-видимому, связано с моим диапазоном:

    Worksheets("HiddenSheet").Range(Cells(i, 1), Cells(i, 6)).Copy

Я не совсем понимаю и буду очень признателен за помощь.

1 Ответ

0 голосов
/ 26 апреля 2019

Ваши Cells(i,#) ссылки не квалифицированы.Поэтому, если вкладка SNVReports активна во время выполнения макроса, она не понимает, о каком диапазоне вы говорите.

Весь код может быть приведен в порядок:

Sub Macro2a()

    Dim sourcesheet As Worksheet
    Dim destsheet As Worksheet
    Dim lastsourcerow as Long
    Dim lastdestrow as Long
    Dim i as Long

    Set sourcesheet = Worksheets("HiddenSheet")
    Set destsheet = Worksheets("SNVReports")

    With sourcesheet

        lastsourcerow = .Cells(.Rows.Count, 1).End(xlUp).Row

        For i = 1 To lastsourcerow

            If .Cells(i, 12).Value = "SNV" Then
                lastdestrow = destsheet.Cells(destsheet.Rows.Count, 1).End(xlUp).Row
               .Range(.Cells(i, 1), .Cells(i, 6)).Copy destsheet.Cells(lastdestrow + 1, 1)
            End If

        Next

    End With

End Sub
...