Ошибка 1004 Приложение определено или ошибка объекта - PullRequest
0 голосов
/ 31 мая 2019

Вот код:

Sub deleterow2()
Dim a As Integer
Dim n As Integer
Dim c As Integer

LastRow = Range("F" & Rows.Count).End(xlUp).Row
For n = 0 To LastRow
a = 1
c = 0
Do Until c = 1
Cells(n + a, 6).Select
If Selection.value = Cells(n, 6) And Selection.value > 30 Then
Selection.EntireRow.Delete
Else
c = 1
End If
a = a + 1
Loop
Next n
End Sub

Что с этим не так?

Ответы [ 3 ]

1 голос
/ 31 мая 2019

Несколько советов:

  1. Вы не можете использовать n = 0, потому что вы создадите ошибку. Строки начинаются с 1.
  2. Когда вы зацикливаетесь, чтобы удалить, вы начинаете с конца. For n = LastRow To 1 Step -1
  3. Если строк много и вы будете использовать For Loop, объявите переменную As Long.
  4. Если у вас много строк, лучше использовать Array.
  5. Старайтесь избегать .Select, создав With Statement с именем листа With ThisWorkbook.Worksheets("Sheet1") и ссылаться на ячейку, используя .Cells(n + A, 6).Value
  6. Do Until должно начинаться также с максимума до минимума, потому что вы идете снизу вверх.
1 голос
/ 31 мая 2019

Пожалуйста, смотрите ниже исправленный код ... вместо того, чтобы начинать с n в 0, начинайте с a в 0. Плюс, избегайте использования .Select всего ... и вы должны попытаться полностью объявить свои диапазоны:

Sub deleterow222()

Dim lastRow As Long, R As Long
Dim ws As Worksheet: Set ws = ActiveWorkbook.ActiveSheet
Dim idColumn as Long: idColumn = 6
Dim diffColumn as Long: diffColumn = 19

    lastRow = ws.Range("F" & ws.Rows.Count).End(xlUp).Row
    For R = lastRow To 2 Step -1
        With ws
            If .Cells(R, idColumn) = .Cells(R - 1, idColumn) And .Cells(R, diffColumn) > 30 Then
                .Cells(R, idColumn).EntireRow.Delete
            End If
        End With
    Next R

End Sub
0 голосов
/ 31 мая 2019

введите описание изображения здесь

Sub deleterow2 ()

Dim lastRow As Long, R As Long Dim ws As Worksheet: Set ws = ActiveWorkbook.ActiveSheet

lastRow = ws.Range("F" & ws.Rows.Count).End(xlUp).Row
For R = lastRow To 2 Step -1
    With ws
        If .Cells(R, 6).value = .Cells(R - 1, 6) And .Cells(R, 19).value > 30 Then
            .Cells(R, 6).EntireRow.Delete
        End If
    End With
Next R

End Sub

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