Перенос 2-го варианта данных в FormulaArray - PullRequest
0 голосов
/ 12 октября 2011

У меня изначально была функция VBA, которая возвращала двумерный вариантный массив:

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

Я использовал синтаксис массива формулы для вызова его из другой функции 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

variable_temp, как и ожидалось, имеет двумерный массив после возврата из SplitIntoCells, но в последующем Selection.FormulaArray по-прежнему ничего нет даже после присваивания.Я уверен, что упускаю что-то ослепительно очевидное.

1 Ответ

0 голосов
/ 12 октября 2011

Пользовательская функция VBA не может изменять ячейку или диапазон, из которого она вызывается: она может только возвращать значение.

...