2017-09-03 77 views
-2

我有一個數組公式如下:Excel的UDF陣列式返回0

Public Function fafsa(inputRange As range, desks As range) As Integer 

    Dim vArr() As Integer 
    Dim i As Long 

    ReDim vArr(1 To inputRange.Cells.Count, 1 To 1) 

    i = 1 
    For i = 1 To inputRange.Cells.Count 
     vArr(i, 1) = 1 
    Next 
    fasfa = vArr 

End Function 

當調用此從Excel,作爲陣列式(CTRL + SHIFT + Enter鍵)它簡單地示出了0,而當我看在觀察窗口的陣列中,它被填充1。任何人有任何想法可能是錯的?

+6

你在最後一排的誤輸入UDF的名稱。在代碼的開始處使用選項顯式來防止這些類型的錯誤。 – Luuklag

+0

您試圖將'fafsa'作爲'Integer'返回,而在函數內部,您正試圖將整個'vArr'數組分配給它。既然你不是在分享你的** UDF **應該做的事情,那麼我們很難爲你提供更好的解決方案。 –

回答

1
  • 正如@luuklag指出的,你有一個簡單的錯字。

由於某些原因,VBA默認爲而不是需要變量聲明。您應該通過導航到「選項」窗口的常規選項卡(工具 - >選項)並設置該選項來更改此選項。這將在每個模塊的開始處放置Option Explicit,您可以檢查HELP的意義。

enter image description here

  • 一旦你這樣做,你會得到一個類型不匹配錯誤。這是因爲,除非輸出類型是Variant,否則需要將輸出特別聲明爲數組。所以,你的第一行應爲:

Public Function fafsa(inputRange As Range, desks As Range) As Integer() 

Public Function fafsa(inputRange As Range, desks As Range) As Variant 

Public Function fafsa(inputRange As Range, desks As Range) 
+0

這不僅僅是拼寫錯誤,他試圖將整個數組分配給一個整數類型,所以不管它是從函數返回的類型,還是在函數內部都改變了。 –

+0

@ShaiRado我解決了這個問題。隨着第一行的改變以及錯字的修正,函數返回一個數組。 –

+0

現在我明白了(你把它放在下面的小字裏)。另外,不太清楚爲什麼PO想要這個UDF,如果他發送一個列的範圍,有更簡單的方法來做到這一點。 –