Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
#来自我的VBA函数的值错误_Vba_Excel - Fatal编程技术网

#来自我的VBA函数的值错误

#来自我的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)

所以我用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) 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,尤其是,你的答案解决了我的问题。初学者的错误谢谢大家,尤其是吉普,你们的回答解决了我的问题。初学者的错误