【发布时间】:2020-03-20 09:20:40
【问题描述】:
我正在尝试编写一个返回数组(CSE 函数)的 UDF。 特别是,UDF 接收文件夹路径并列出其中的所有内容。
我想我快到了,因为在调试函数时确实将其所有数组元素分配给了我想要的值,但是当在 Excel 上的选定范围内执行 Ctrl + Shift + Enter 时,它只显示第一个元素。
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
这是结束函数之前我当地人的片段......
CountFilesInFolder 是这样的: https://wellsr.com/vba/2016/excel/vba-count-files-in-folder/
我四处寻找这个问题,但我只能找到有#VALUE的人,基本上连这最后一步都达不到。
注意:将函数的返回类型从 variant 更改为 string() 会导致同样的问题。
它可能有一个非常明显的解决方案,但我在这里迷失了一段时间。
【问题讨论】:
-
您的数组是一维的
(1 to 6),但范围始终是二维的(rows, columns),即使它只有一行或一列,也有 2 个维度,如(1 to 6, 1 to 1)表示 6 行 1 列。这可能是您遇到的问题。 -
谢谢...我知道这并不难...我只是想出来!
-
用一个例子把它写成答案。