我已經將數組從電子表格傳遞給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上述錄音的列表 - 樣:
「在計算中,把明顯的爲有用的詞‘無奈’的生動定義」;
「一個人的常量是另一個人的變量」;
「傻瓜忽略複雜性,實用主義者承受它,有些人可以避免它,天才將它去除。
我帶他,因爲產生「乾淨」的代碼的願望去的方式回到第一個計算機上的第一個編碼器。我非常喜歡他。
選擇單元格的4x4網格,並嘗試對這些公式。這將變得很清楚,你的問題是(1)這個數組設置爲一行,而不是一列,(2)你的數組索引從0開始,所以行中的第一個值是空的。 – Chel
'ReDim y(3)'將上限設置爲3(除非您使用'Option Base 1',否則下限爲零,因此它將有4個元素) –
RDHS,Tim和Gary的學生 - 感謝您的光臨 - 答案。 – tpkaplan