使用 FindNext 的 UDF 似乎在没有警告的情况下中止
UDF using FindNext seems to abort without warning
我有以下用户定义的函数,它试图找到范围内的第 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!
-alert.
看看我的 immediate-window 中显示的内容也很奇怪,因为执行 FindNext
后的两条 Debug.Print
消息没有打印出来,尽管我没有警报。
我立即得到的输出 window,以 2 作为参数调用的 UDF 只是一个 x:
调用函数的区域看起来像 this (the first line is the UDF invoked with 1 as the argument, the second is it invoked with 2 as the argument), while the area containing data looks like this.
所以我想知道的是,为什么 FindNext
找不到范围内的第二个非空单元格,为什么函数会在没有任何警告的情况下中止?
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!
-alert.
看看我的 immediate-window 中显示的内容也很奇怪,因为执行 FindNext
后的两条 Debug.Print
消息没有打印出来,尽管我没有警报。
我立即得到的输出 window,以 2 作为参数调用的 UDF 只是一个 x:
调用函数的区域看起来像 this (the first line is the UDF invoked with 1 as the argument, the second is it invoked with 2 as the argument), while the area containing data looks like this.
所以我想知道的是,为什么 FindNext
找不到范围内的第二个非空单元格,为什么函数会在没有任何警告的情况下中止?
FindNext
在 UDF 中不起作用。您必须简单地重复原来的 Find
操作。