来自我的VBA功能的#VALUE ERROR

时间:2016-03-05 12:15:29

标签: excel vba excel-vba

所以我在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(18;G22:G26;H22:H26)) ,我收到#VALUE错误。 我不明白为什么。该函数应该通过nedela数组,如果它找到非空或不同于0的值,并且ceni数组中匹配的单元格与数字fiksnacena不同,它应该返回nedela中单元格的值。

1 个答案:

答案 0 :(得分:3)

您不能简单地将单元格范围引用传递给UDF,并将其解释为单个维度的long数组。

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

将范围引用中的值转储到数组中时,最终会得到一个二维数组;在您的示例中,它是1到5,1到1。

为了进一步说明这一点,如果您在转置它们之后从范围中提取值并使用CSE完成UDF以便将值作为数组处理,则原始UDF代码将起作用。

=KOLICINA(18, VALUE(TRANSPOSE(G22:G26)), VALUE(TRANSPOSE(H22:H26)))

用[ctrl] + [shift] + [enter]完成。