1

我有以下用户定义的函数,它试图在一个范围内找到第 n 个非空单元格:

Option Explicit

Function finn_prioritert_oppgave(nummer As Long) As String

  Dim i As Long, r As Range, c As Range

  Set r = Range(PDCA.Range("L9"), PDCA.Range("L1048576").End(xlUp))
  i = 1

  Set c = r.Find(What:="*", LookIn:=xlValues, LookAt:=xlWhole)

  While (Not c Is Nothing) And (Intersect(c, PDCA.Rows(9)) Is Nothing) And (i < nummer)

    Debug.Print c
    Set c = r.FindNext(c)
    Debug.Print c
    Debug.Print CBool(c Is Nothing)
    i = i + 1

  Wend

  If c Is Nothing Then
    finn_prioritert_oppgave = "#N/A"
  Else
    finn_prioritert_oppgave = c.Offset(0, -10).Value
  End If

End Function

使用 1 作为参数运行它可以正常工作,大概是因为它没有进入While-loop 并点击FindNext,但是使用任何更大的值作为参数运行它会导致调用它的单元格显示#VALUE!-alert。

查看即时窗口中显示的内容也很奇怪,因为执行Debug.Print后的两条消息FindNext不会打印,尽管我没有收到任何警报。

我在即时窗口中得到的输出,使用 2 作为参数调用的 UDF 只是一个 x:

在此处输入图像描述
调用函数的区域如下所示(第一行是使用 1 作为参数调用的 UDF,第二行是使用 2 作为参数调用的 UDF),而包含数据的区域如下所示

所以我想知道的是,为什么FindNext在范围内找不到第二个非空单元格,为什么函数在没有任何警告的情况下中止?

4

1 回答 1

3

FindNext在 UDF 中不起作用。您必须简单地重复原始Find操作。

于 2015-02-25T11:04:57.697 回答