使用FindNext的UDF似乎中止没有警告

我有以下用户定义函数,它试图find范围中的第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循环,并击中FindNext ,但运行它与任何更大的值作为参数导致它调用的单元显示一个#VALUE! -警报。

看看我的直接窗口中显示的内容也很奇怪,因为执行FindNext之后的两个Debug.Print消息不会打印,尽pipe我没有收到警报。

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

在这里输入图像说明
函数调用的区域如下所示 (第一行是用1作为参数调用的UDF,第二行是用2作为参数调用的),而包含数据的区域如下所示 。

所以我想知道的是,为什么FindNext无法find范围中的第二个非空单元格,为什么函数中止没有任何警告?

FindNext在UDF中不起作用。 您必须重复原来的Find操作。