CSE UDF VBA Возвращение только первого элемента - PullRequest
0 голосов
/ 20 марта 2020

Я пытаюсь написать UDF, который возвращает массив (функция CSE). В частности, UDF получает путь к папке и перечисляет все в нем.

Я думаю, что я почти на месте, потому что при отладке функция имеет все элементы массива, присвоенные значениям, которые я хочу, но при выполнении Ctrl + Shift + Enter в выбранном диапазоне в Excel, он показывает только первый элемент.

Function VBA_ListFilesIn(mypath As String) As Variant
Dim myArray() As String
Dim myArraySize As Integer

Dim oFSO As Object
Dim oFolder As Object
Dim oFile As Object
Dim i As Integer

myArraySize = CountFilesInFolder(mypath)
ReDim myArray(1 To myArraySize)

Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oFolder = oFSO.GetFolder(mypath)

i = 1
For Each oFile In oFolder.Files
myArray(i) = oFile.Name
If i < myArraySize Then
i = i + 1
End If
Next oFile
VBA_ListFilesIn = myArray

End Function

Это отрывок моих местных жителей прямо перед функцией завершения ... This is a snip of my locals right before End Function

CountFilesInFolder вот что: https://wellsr.com/vba/2016/excel/vba-count-files-in-folder/

Я искал эту проблему, но я мог найти только людей, имеющих #VALUE, в основном не достигших даже этого последнего шага.

Примечание : Изменение типа возвращаемого значения функции с варианта на строку () приводит к той же самой проблеме.

Возможно, у нее есть очень очевидное решение, но я здесь некоторое время потерян.

1 Ответ

2 голосов
/ 20 марта 2020

Ваш массив является 1-мерным (1 to 6), но диапазоны всегда являются 2-мерными (rows, columns), даже если это всего одна строка или один столбец, есть 2 измерения, например (1 to 6, 1 to 1) означает 6 строк 1 столбец. Это, вероятно, проблема, которая у вас есть.

Пример:

Option Explicit

Public Function Return1Dimension() As String()
    Dim arr(1 To 3) As String

    arr(1) = "First"
    arr(2) = "Second"
    arr(3) = "Third"

    Return1Dimension = arr
End Function



Public Function Return2Dimensions() As String()
    Dim arr(1 To 3, 1 To 1) As String

    arr(1, 1) = "First"
    arr(2, 1) = "Second"
    arr(3, 1) = "Third"

    Return2Dimensions = arr
End Function

enter image description here

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