#来自我的VBA函数的值错误
所以我用VBA编写了一个简单的函数,我想在excel工作簿中使用它。我编写了以下代码:#来自我的VBA函数的值错误,vba,excel,Vba,Excel,所以我用VBA编写了一个简单的函数,我想在excel工作簿中使用它。我编写了以下代码: Option Explicit Public Function KOLICINA(fiksnacena As Long, ceni() As Long, nedela() As Long) As Long Dim brojac As Integer For brojac = 1 To UBound(nedela) If Not ((IsEmpty(nedela(brojac)
Option Explicit
Public Function KOLICINA(fiksnacena As Long, ceni() As Long, nedela() As Long) As Long
Dim brojac As Integer
For brojac = 1 To UBound(nedela)
If Not ((IsEmpty(nedela(brojac) Or nedela(brojac) = 0) And ceni(brojac) <> fiksnacena)) Then KOLICINA = nedela(brojac)
Next brojac
End Function
选项显式
公共函数KOLICINA(fiksnacena为Long,ceni()为Long,nedela()为Long)为Long
Dim brojac作为整数
对于brojac=1至UBound(nedela)
如果不是(IsEmpty(nedela(brojac)或nedela(brojac)=0)和ceni(brojac)fiksnacena),则KOLICINA=nedela(brojac)
下一个布罗哈克
端函数
当我尝试在工作表单元格中使用它时(使用=KOLICINA(18;G22:G26;H22:H26)
)
,我得到#值
错误。
我不明白为什么。函数应通过
nedela
数组,如果它发现一个非空值或与0
不同的值,如果ceni
数组中的匹配单元格与编号fiksnacena
不同,它应该在nedela
中返回单元格的值。您不能简单地将单元格范围引用传递到UDF中,并将其解释为一维长数组
Public Function KOLICINA(fiksnacena As Long, ceni As Range, nedela As Range) As Long
Dim brojac As Long, vCeni As Variant, vNedela As Variant
vCeni = ceni.Value2
vNedela = nedela.Value2
For brojac = LBound(vNedela, 1) To UBound(vNedela, 1)
If Not ((IsEmpty(vNedela(brojac, 1) Or vNedela(brojac, 1) = 0) And vCeni(brojac, 1) <> fiksnacena)) Then
KOLICINA = vNedela(brojac, 1)
Exit For
End If
Next brojac
End Function
使用[ctrl]+[shift]+[enter]完成。不能简单地将单元格范围引用传递到UDF中,并将其解释为一维长数组
Public Function KOLICINA(fiksnacena As Long, ceni As Range, nedela As Range) As Long
Dim brojac As Long, vCeni As Variant, vNedela As Variant
vCeni = ceni.Value2
vNedela = nedela.Value2
For brojac = LBound(vNedela, 1) To UBound(vNedela, 1)
If Not ((IsEmpty(vNedela(brojac, 1) Or vNedela(brojac, 1) = 0) And vCeni(brojac, 1) <> fiksnacena)) Then
KOLICINA = vNedela(brojac, 1)
Exit For
End If
Next brojac
End Function
用[ctrl]+[shift]+[enter]完成。可能将
ceni()
和nedela()
更改为Range
,而不是Long
?那么KOLICINA=nedela(brojac)
可能会被取代,然后是KOLICINA=nedela(brojac)
后接退出功能
后接结束If
。一旦你找到了返回值,为什么要继续循环(除非你想要最后一个匹配)?显然你的意思是如果不是(IsEmpty(nedela(brojac))或nedela(brojac)=0)和ceni(brojac)fiksnacena,那么
@JohnColeman是的,我尝试过了,但仍然显示了#值错误…没有空的
长,因此,我看不出对Long数组的元素进行isEmpty
测试的意义可能会改变ceni()
和nedela()
到Range
而不是Long
?然后KOLICINA=nedela(brojac)
可能会被取代,然后是KOLICINA=nedela(brojac)
后接退出功能
后接结束If
。一旦你找到了返回值,为什么要继续循环(除非你想要最后一个匹配)?显然你的意思是如果不是(IsEmpty(nedela(brojac))或nedela(brojac)=0)和ceni(brojac)fiksnacena,那么
@JohnColeman是的,我尝试过了,但仍然显示了#值错误…没有空的
长,所以我看不出对一系列元素进行isEmpty
测试的意义。谢谢大家,@Jeeped,尤其是,你的答案解决了我的问题。初学者的错误谢谢大家,尤其是吉普,你们的回答解决了我的问题。初学者的错误