Объект Требуется ошибка 424 при вызове подпрограммы

Я пытаюсь вызвать подпрограмму, которая расширит формулы до последней строки, когда что-либо в столбце B на листе Excel TitlesList изменится. Формулы не могут существовать до того, как что-либо будет добавлено, поэтому они должны существовать в строке только после изменения в столбце B. Цель состоит в том, чтобы позволить API из FLOW вставить строку в excel, тогда excel применит формулу для создания новое значение в другом столбце, и FLOW обновит новое значение в Planner. (сложный?) В частности, я пытаюсь обеспечить, чтобы заголовок карты в планировщике всегда имел уникальное значение перед заголовком. Например, если название карточки: "Это название карточки", у меня есть поток, который успешно добавит строку в Excel, но добавит строку в последнюю пустую строку рабочего листа. На этом этапе я хочу расширить формулу, которая добавляет порядковый номер,например № 23, в столбец, затем объедините порядковый номер и создайте новый заголовок столбца как таковой: "23 - Это заголовок карточки", тогда FLOW запустит процедуру обновления из Excel в Planner, сохраняя все карточки и задания с номером. (подумать, было бы проще, если бы люди из Планировщика разрешили настраиваемые поля). Что я делаю не так в этом VBA. Извините, что мало опыта работы с VBA.

Код для вызова субмарины:

Private Sub Worksheet_Change(ByVal Targe As Range)
    If Not Intersect(Target, Range("B2:B500")) Is Nothing Then
    'If any changes occurr in column B
          Call ExtendRows
          ' Then extend the formulas
    End If
End Sub

Код для расширения формул:

Sub ExtendRows()
    lr = Cells.Find("ROW", Cells(1, 1), xlFormulas, xlPart, xlByRows, xlPrevious, False).Row
    'find the last row with a formula
    Range("A2").AutoFill Range("A2:A" & (lr + 1))
    'fill the formula in the last row
End Sub

Ошибка: Ошибка выполнения "424" Требуется объект, и он возвращает меня к коду Worksheet_Change. Что я делаю не так? Я прочитал все об этой ошибке, но не могу понять, что мне делать. Мне нужно где-то что-то декларировать? Спасибо.

1 ответ

Если Find() не находит совпадения, затем возвращается Nothing - вы не можете получить Row свойство Nothing.

Лучше так:

Private Sub Worksheet_Change(ByVal Targe As Range)
    If Not Intersect(Target, Range("B2:B500")) Is Nothing Then
        ExtendRows Me '<< pass the worksheet to check
    End If
End Sub


'gets the worksheet to look at...
Sub ExtendRows(ws As Worksheet)
    Dim f As Range
    Set f = ws.Cells.Find("ROW", ws.Cells(1, 1), xlFormulas, xlPart, _
                           xlByRows, xlPrevious, False)
    if not f is nothing then
        ws.Range("A2").AutoFill ws.Range("A2:A" & f.row+1)
    else
        'did not find "ROW"
    end if
End Sub
Другие вопросы по тегам