[英]#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.