передать константу массива Excel в функцию VBA - PullRequest
3 голосов
/ 19 июня 2019

У меня есть ячейка, значение которой является константой массива, например, ячейка A1 установлена ​​на ={1,2,3,4,5,6}

Затем я определил функцию в VBA:

Function MyFunc(Data)
MyFunc = Data.Rows.Count
End Function

Я хочу, чтобы функция возвращала длину массива (6), когда я могу =MyFunc(A1), но с помощью отладчика я обнаружил, что переменная «Данные», которую получает моя функция, содержит только первый элемент этого массива. Data.Rows.Count оценивается как 1, а TypeName(Data) оценивается как 'Range'

Ответы [ 3 ]

5 голосов
/ 19 июня 2019

И еще один метод:

Function myFunc(Data)
    myFunc = UBound(Evaluate(Data.Formula))
End Function
3 голосов
/ 19 июня 2019

Может быть

Function MyFunc(data As Range)
Dim x

x = Split(Mid(data.Formula, 3), ",")
MyFunc = UBound(x) + 1
End Function
3 голосов
/ 19 июня 2019

Я не уверен, каков ваш вариант использования, но я думаю, что вы можете просто использовать Split здесь.

Function MyFunc(ByVal Data As Range) As Long
    Dim x
    x = Split(Data.Formula, ",")
    MyFunc = UBound(x) + 1
End Function

enter image description here

Очевидно, что это можно сделать более надежным (например, обрабатывать многоэлементный ввод), но я думаю, что это заставит вас двигаться в правильном направлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...