Ошибка времени выполнения 91 при использовании метода find - PullRequest
0 голосов
/ 21 января 2019

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

Я запустил рекордер макросов и использовал его для создания приведенного ниже кода - все работало нормально, когда я запускал код с рекордера, но теперь я попытался персонализировать его в своей книге (т. Е. Добавить имена книг), которую я сохраняю получить

ошибка выполнения 91 в этой строке

cell = data.Range("A1:A400").Find(What:="Date", lookat:=xlWhole)

Любая помощь по поводу того, что я сделал, чтобы вызвать ошибку, чтобы я мог избежать ее в будущем, была бы очень полезна!

Sub RemoveLine()
    Dim del, dr As Workbook
    Set dr = ThisWorkbook
    Set del = Workbooks("Delivery Data.xls")

    Dim rep, inf, data As Worksheet
    Set rep = dr.Sheets("Report")
    Set inf = dr.Sheets("Info")
    Set data = dr.Sheets("Data")

    Dim r1, r2, r3, r4, row01 As Long

    Dim nu, na As String

    nu = inf.Range("C7").Text
    na = inf.Range("C4").Text

    cell = data.Range("A1:A400").Find(What:="Date", lookat:=xlWhole)           
    MsgBox cell

    If Not cell Is Nothing Then          
        row01 = cell.Row
        data.Range("A" & row01 & ":S" & row01).Delete Shift:=xlUp
        data.Sort.SortFields.Clear
        data.Sort.SortFields.Add Key:=Range("A2:A21"), _
          SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

        With data.Sort
            .SetRange Range("A2:S21")
            .Header = xlGuess
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With


        'FORMULAS                    
        Dim st1, st2, st3, st4, st5, st6 As String

        st1 = "=IF(Data!A2="""", """", Data!A2)"
        st2 = "=IF(Data!C2="""", """", Data!C2)"
        st3 = "=IF(Data!G2="""", """", Data!G2)"
        st4 = "=IF(F3="""", """", G3/$C$10)"
        st5 = "=IF(E27="""", """", Data!G2)"
        st6 = "=IF(C27="""", """", G27/Info!$C$10)"

        With inf
            .Range("E3:E100").Formula = st1
            .Range("F3:F100").Formula = st2
            .Range("G3:G100").Formula = st3
            .Range("H3:H100").Formula = st4
        End With

        With rep
            .Range("B27:C62").Formula = st1
            .Range("E27:E62").Formula = st2
            .Range("G27:G62").Formula = st5
            .Range("J27:J62").Formula = st6
        End With       
    End If            
End Sub

1 Ответ

0 голосов
/ 21 января 2019

Ваша ошибка, вероятно, связана с тем, что cell не объявлен, и вы не используете ключевое слово Set.Согласно документации , Find для Range возвращается Range (или Nothing), поэтому вы должны иметь:

Dim cell As Range
Set cell = data.Range("A1:A400").Find(What:="Date", LookAt:=xlWhole)
...