Arrays 如何在vba中动态定义多个数组-文件夹中的每个文件对应一个数组

Arrays 如何在vba中动态定义多个数组-文件夹中的每个文件对应一个数组,arrays,excel,vba,Arrays,Excel,Vba,我有一个包含几个excel文件的文件夹 在每个文件中,我想创建一个数组,其中包含“数据”表中的数据。每个工作簿或文件都有此工作表 唯一的问题是每次文件夹中可能有不同数量的文件 我想捕获每个数组中每个文件的“数据”工作表的内容,然后将所有这些数据写入单个文件 问题 是否可以根据文件夹中的文件数等动态创建阵列 如果是,如何创建这些动态数组 示例 而不是有一个数组(我改变大小),我想。。。 (例如,根据文件夹中的文件数,是否创建那么多单独的阵列 e、 g.3文件夹中的文件 暗阵列01 暗淡阵列02 暗

我有一个包含几个excel文件的文件夹

在每个文件中,我想创建一个数组,其中包含“数据”表中的数据。每个工作簿或文件都有此工作表

唯一的问题是每次文件夹中可能有不同数量的文件

我想捕获每个数组中每个文件的“数据”工作表的内容,然后将所有这些数据写入单个文件

问题 是否可以根据文件夹中的文件数等动态创建阵列

如果是,如何创建这些动态数组

示例 而不是有一个数组(我改变大小),我想。。。 (例如,根据文件夹中的文件数,是否创建那么多单独的阵列

e、 g.3文件夹中的文件

暗阵列01 暗淡阵列02 暗阵列03


最好是在文件夹中创建一个工作簿数组来存储“数据”工作表的内容,或者创建一个更大的数组?

,而不是使用多维数组并始终重新调用它,考虑将每个数据数组存储在<代码>集合< /代码>中:
Dim allData As Collection, data As Variant, file As Variant
Dim wb As Workbook, ws As Worksheet


Set allData = New Collection
file = Dir("c:\testfolder\*.xlsx")
While (file <> "")
    Set wb = Workbooks.Open(file)
    data = wb.Sheets(1).UsedRange.Cells  'Adjust this to get your data range
    allData.Add data, file
    file = Dir
Wend

ReDim Preserve somearray(intLargerThanBefore)
好的,我知道你可以用ReDim Preserve更改数组的大小,但是如何更改数组的数量?你可以创建多维数组?看,我想你需要多维数组。所以数组(0,1)将是第0个文件夹中的第一个文件等。如果多维数组中有两个文件,如何访问第一个文件中数据的元素(列、行)?通常我会使用ubound(数组,1)ubound(数组,2)执行循环?
Dim count As Integer
For Each data In allData
    count = count + 1
    Debug.Print "Dataset #" & count & " has " & _
        UBound(data, 1) & " x " & UBound(data, 2) & " entries"
Next
    Sub MAIN()
   Dim FolderOfInterest As String, i As Long
    FolderOfInterest = "C:\TestFolder"
   Dim ary()
    ary = files_in_folder(FolderOfInterest)
   MsgBox "There are " & UBound(ary) & " files in folder " & FolderOfInterest
   '
   '  Now store the array in a worksheet column
'
i = 1
For Each a In ary
   Cells(i, "A").Value = a
  i = i + 1
Next a
End Sub

Public Function files_in_folder(folderS As String) As Variant
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set folder = fso.GetFolder(folderS)
   ReDim temp(1 To folder.Files.Count)

   i = 1
   For Each file In folder.Files
   temp(i) = file.Name
  i = i + 1
  Next file

   files_in_folder = temp
End Function