Невозможно найти и удалить строку, используя строковое значение - PullRequest
0 голосов
/ 04 февраля 2020

Я пытаюсь найти и удалить строку, содержащую указанное c значение. Для этого я использую следующий код excel-VBA, но он показывает ошибку и, следовательно, ничего не находит (показывает rfnd = nothing). Мой код -

Sub Save_Data_on_Master_Sheet()
'''' Save Data on Master Sheet''''
Dim Str As String, rfnd As Range

Str = Sheets("MASTER_DATA").Range("P2")

Sheets("MASTER_DATA").Range("D5:D2000").Select
Set rfnd = Selection.Find(Str, After:=Sheets("MASTER_DATA").Range("D4"), LookIn:=xlValues, _
        LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False)
rfnd.EntireRow.Delete

End Sub

Ссылки скриншотов https://www.dropbox.com/s/v0zfs575mjqz7ve/Capture.JPG?dl=0 https://www.dropbox.com/s/3hxrpbcj1pjx7oc/Capture.JPG2.JPG?dl=0

Может кто-нибудь сказать мне, где я допустил ошибку !

1 Ответ

2 голосов
/ 04 февраля 2020

Согласно комментарию, непосредственной причиной вашей ошибки было то, что ваш параметр After был задан как ячейка за пределами диапазона поиска.

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

Вы также можете избегать выбора .

И всегда проверять, что ваш Find что-то находит, прежде чем воздействовать на результат, чтобы избежать ошибка.

Sub Save_Data_on_Master_Sheet()

Dim Str As String, rfnd As Range

With Sheets("MASTER_DATA")
    Str = .Range("P2").Value
    Set rfnd = .Range("D5:D2000").Find(Str, LookIn:=xlValues, _
                        LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
                        MatchCase:=False, SearchFormat:=False)
    If Not rfnd Is Nothing Then rfnd.EntireRow.Delete
End With

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