2013-10-10 108 views
1

我已經將數組從電子表格傳遞給VBA函數多次。我最近「升級」到Excel 365,現在我無法讓它工作。例如:將數組從Excel VBA函數傳遞給電子表格

Public Function test(x As Range) 
    Dim y() 
    ReDim y(3) 
    y(1) = 1 
    y(2) = 2 
    y(3) = 3 
    test = y 
End Function 

然後我突出三個小區,例如,B1:b3和在頂部電池餘進入=試驗(A1:A2)和命中移位輸入。這用一個數組公式來填充範圍,該公式應該從測試函數接收y()。

但是,引用函數的單元格都是零。我把調試線,我可以告訴該功能正在按預期運行。它只是沒有將數組傳遞給電子表格。

這是怎麼回事?有沒有其他人有這種經驗?


@RDHS,@ tim-williams和@ garys-student - 感謝您提供現場答案。還有加里的學生 - 謝謝你的快速反應。我會爲大家投票,但我不能'因爲我是小白。

但是......爲了完整起見,你的回答提出了另一個問題(更理論型的問題):我應該能夠直接將一維數組強制轉換爲區域列,反之亦然。

顯然,這是很容易的檢查範圍的形狀,並相應地改變它(當然,這很容易,現在你已經展示了我如何!),但它是如此草率:

使用上面的例子,而不是隻是寫 測試= Y

我需要寫:

如果x.rows.count = 1個,則 測試= Y
否則 測試= worksheetfunction.transpose(Y) 結束時,如果

我不瞭解你,但我會拿第一門(測試= y)。另一種方式是SOOOO馬虎。 (C1:C10,3)和索引(C1:C10,3)和索引(C1:C10,3)的索引(索引,匹配等等)的內置電子數組表格a3:k3,3)都返回C3中的值,這是每個ARRAY中的第三個ITEM。索引足夠聰明,可以確定哪個是第三個項目。當然,如果你可以在工作表上做到這一點,那麼在VBA中必須有辦法做到這一點?

我的最愛Comp。科學。教授 - 計算機科學領域的創始人之一 - 曾經說過:「當程序需要關注無關緊要的時候,程序設計語言是低層次的。」

他實際上做了很多有洞察力的觀察,他分佈在ARPANET上,使他成爲世界上第一個博主(Google Alan Perlis)之一。二十年來,每一個程序員有Perlisisms他VT100上述錄音的列表 - 樣:

  • 「在計算中,把明顯的爲有用的詞‘無奈’的生動定義」;

  • 「一個人的常量是另一個人的變量」;

  • 「傻瓜忽略複雜性,實用主義者承受它,有些人可以避免它,天才將它去除。

我帶他,因爲產生「乾淨」的代碼的願望去的方式回到第一個計算機上的第一個編碼器。我非常喜歡他。

+2

選擇單元格的4x4網格,並嘗試對這些公式。這將變得很清楚,你的問題是(1)這個數組設置爲一行,而不是一列,(2)你的數組索引從0開始,所以行中的第一個值是空的。 – Chel

+0

'ReDim y(3)'將上限設置爲3(除非您使用'Option Base 1',否則下限爲零,因此它將有4個元素) –

+0

RDHS,Tim​​和Gary的學生 - 感謝您的光臨 - 答案。 – tpkaplan

回答

0

試試這個:

Public Function test(x As Range) 
    Dim y() 
    ReDim y(3) 
    y(0) = 1 
    y(1) = 2 
    y(2) = 3 
    test = WorksheetFunction.Transpose(y) 
End Function