0

在此处输入图像描述

我正在尝试调用一个子例程,当 Excel 工作表 TitlesList 的 B 列上的任何内容发生更改时,该子例程会将公式扩展到最后一行。在添加任何内容之前,公式不能存在,因此只能在 B 列中进行更改后存在于一行中。目的是允许来自 FLOW 的 API 在 excel 中插入一行,然后 excel 将应用一个公式来创建一个另一列中的新值,然后 FLOW 将更新 Planner 中的新值。(复杂?)具体来说,我试图确保规划器中的卡片标题始终在标题前具有唯一值。例如,如果卡片标题是:“这是卡片标题”,我有一个流程可以成功地将一行添加到 excel 中,但它会在工作表的最后一个空行中添加该行。那时我想扩展公式,添加一个序列号,例如第 23 号,在一个列中,然后连接序列号并创建一个新的列标题,如下所示:“23 - 这是一个卡片标题”然后 FLOW 将运行一个例程从 Excel 更新到 Planner,从而保持所有带有数字的卡片和任务。(如果计划人员允许自定义字段,认为这会更容易)。我在这个 VBA 中做错了什么。抱歉没有太多的VBA经验。

调用 sub 的代码是:

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 代码。我究竟做错了什么?我已经阅读了有关此错误的所有信息,但我似乎无法弄清楚我该怎么做。我需要在某处声明什么吗?谢谢你。

4

1 回答 1

0

如果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
于 2020-06-10T00:17:45.213 回答