我想讓Excel VBA UDF函數返回一個數組。截至目前,該函數要麼返回#VALUE!如果我將參數定義爲雙數組,或者如果將參數定義爲變體,則數組中的所有單元格都具有相同的值,即使我在VBE中的「本地」窗口中進行了檢查,並且返回的數組變量實際上包含不同的值,也會出現錯誤。Excel VBA UDF數組函數爲所有cels返回相同的值
這裏是我的代碼:
Function VaRScenariosTest(ByRef dblRealRates() As Double/Variant) As Double()
'dblRealRates() is defined as either Double or Variant
Dim intCount As Integer
Dim dblTemp() As Double
For intCount = LBound(dblRealRates) To (UBound(dblRealRates) - 1)
ReDim Preserve dblTemp(1 To intCount)
dblTemp(intCount) = dblRealRates(intCount + 1) - dblRealRates(intCount)
Next intCount
VaRScenariosTest = dblTemp
End Function
Function Range2dblArray(ByRef rngRange As Range) As Double()
Dim dblTemp() As Double
Dim intCount As Integer
For intCount = 1 To rngRange.Count
ReDim Preserve dblTemp(1 To intCount)
dblTemp(intCount) = rngRange.Cells(intCount)
Next intCount
Range2dblArray = dblTemp
End Function
我撥打以下方式中的電子表格功能: function call in excel with dblRealRates() as Double/Variant
E欄包含輸入功能,F列中的值應返回由函數和列G來表示函數本身。如果我將dblRealRates()變量類型定義爲double,則該公式會返回#VALUE!錯誤。如果我將其定義爲變體,則電子表格中的返回值是相同的。 如果我暫停碼在結束函數行的執行,並期待在本地窗口,你可以看到,該數組中的值是不同的,不是所有的等於0.000016287在電子表格中的輸出表明:Function Array values in Locals Window
有人可以請告知爲什麼當dblRealRates()變量被定義爲double時,公式返回一個錯誤,爲什麼如果它被定義爲variant,它會返回相同的值?
是否有你需要使用'Range2dblArray'作爲UDF的原因?如果它不需要在Excel單元格中可用,事情會變得更容易,而且我不確定它將作爲獨立的Excel函數使用。如果它不需要是UDF,那麼你可以傳遞'Range'到'VaRScenariosTest',然後可以調用'Range2dblArray'作爲它的第一件事。 – YowE3K
'VaRScenariosTest'函數是一個更大計算的中間步驟,因此它將以vba變量作爲參數而不是'Range'對象。然而,爲了測試的目的,我希望能夠看看所有的中間步驟,因此我實現了'Range2dblArray'函數以便能夠將'Range'對象傳遞到中間函數中,我希望檢查中間結果 – VBAEnthusiast
這似乎是很多努力,以避免使用本地窗口查看中間結果。 – YowE3K