CSE UDF VBA仅返回第一个元素

时间:2020-03-20 09:20:40

标签: excel vba

我正在尝试编写一个返回数组的UDF(CSE函数)。 特别是,UDF会接收一个文件夹路径并列出其中的所有内容。

我想我几乎在那儿了,因为在调试函数时,确实将其所有数组元素分配给了我想要的值,但是在Ctrl + Shift + Enter上在Excel的选定范围内时,它仅显示第一个元素。 / p>

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的人,基本上到最后一步都没有。

注意:将函数的返回类型从variant更改为string()会导致相同的问题。

它可能有一个非常明显的解决方案,但是我在这里有些失落。

1 个答案:

答案 0 :(得分:2)

您的数组是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

相关问题