簡體   English   中英

我的VBA函數出現#VALUE錯誤

[英]#VALUE ERROR from my VBA function

所以我在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 Array,並且如果發現一個非空值或不同於0值,並且如果ceni Array中的匹配單元格與數字fiksnacena不同,則該函數應返回nedela中該單元格的值。

您不能簡單地將單元格范圍引用傳遞給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]結束。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM