【问题标题】:how define a number of arrays in vba dynamically - one array for each file in a folder如何在vba中动态定义多个数组-文件夹中的每个文件一个数组
【发布时间】:2014-08-22 02:56:56
【问题描述】:

我有一个文件夹,其中包含一些 excel 文件。

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

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

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

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

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

示例 而不是拥有一个数组(我改变了它的大小),我想...... (取决于文件夹中的文件数量,例如创建那么多单独的数组?

例如一个文件夹中的 3 个文件

暗阵列01 暗阵列02 昏暗数组03

最好为文件夹中的每个工作簿创建一个数组 - 存储“数据”工作表的内容,还是创建一个更大的数组?

【问题讨论】:

  • ReDim Preserve somearray(intLargerThanBefore)
  • 好的,我知道您可以使用 ReDim Preserve 更改数组的大小,但是如何更改数组的数量?
  • 你可以做一个多维数组吗?见this
  • 我想你想要一个多维数组。所以 array(0,1) 将是第 0 个文件夹中的第一个文件等。
  • 如果多维数组中有两个文件,如何访问第一个文件中数据的元素(列、行)?通常我会用 ubound(array,1) ubound(array,2) 做一个循环?

标签: arrays excel vba


【解决方案1】:

不要使用多维数组并一直重新调整它,而是考虑将每个数据数组存储在Collection中,如下所示:

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

稍后您可以使用For Each 循环来检索数据:

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

【讨论】:

    【解决方案2】:
        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
    

    【讨论】:

      猜你喜欢
      • 2010-12-08
      • 2018-08-06
      • 2019-06-18
      • 1970-01-01
      • 2021-12-19
      • 1970-01-01
      • 1970-01-01
      • 2021-12-22
      • 1970-01-01
      相关资源
      最近更新 更多