2011-10-12 75 views
0

我本來該返回的二維變量數組一個VBA函數:推2-d Variant數據到FormulaArray

Public Function SplitIntoCells(some_data As String) As Variant() 
End Function 

所用式I陣列語法從另一個VBA函數調用它:

Public Function MyWrapper() as Variant 
    MyWrapper = SplitIntoCells("somestring") 
End Function 

從Excel中,如果我選擇一個足夠大的範圍,然後做:

= MyWrapper()

然後按CTRL + SHIFT + ENTER,數據很好地分割成該範圍內的每個單獨的單元格。

但是爲了自動執行,如果我改變MyWrapper到:

Public Function MyWrapper() 
    ActiveSheet.Range("A1:E20").Select 
    Selection.FormulaArray = SplitIntoCells("somestring") 
End Function 

以上不起作用。我看不到在Excel中顯示的內容。

我在做什麼錯?

更新:

只是用於測試,如果我稍微修改MyWrapper()到:

Public Function MyWrapper() 
    Dim variant_temp() as Variant 
    variant_temp = SplitIntoCells("somestring") 
    ActiveSheet.Range("A1:E20").Select 
    Selection.FormulaArray = variant_temp 
End Function 

variant_temp預測地具有從SplitIntoCells返回但後續Selection.FormulaArray仍具有後的2-d陣列即使在作業後也沒有任何內容。我相信我錯失了一些非常明顯的東西。

回答

0

VBA用戶定義函數不能修改被調用的單元格或範圍:它只能返回一個值。

+0

有沒有其他方法可以實現我想要的? – ForeverLearning

+0

是的:您可以從像worksheet_change或worksheet_selectionchange這樣的事件中運行它。或者只是把它放在一個普通的Sub中,並用一個按鈕調用它...最佳方法取決於您的特定需求。 –