Excel VBA 宏中的数组

Posted

技术标签:

【中文标题】Excel VBA 宏中的数组【英文标题】:Arrays in Excel VBA macro 【发布时间】:2013-03-18 20:47:59 【问题描述】:

我有一个包含许多文件的文件夹,我需要从这些文件夹中:打开本周的文件,将它们存储在一个数组中,将它们传递给一个 sub,然后循环它们以获取摘要信息。

我可以从下面的代码中获取所需的日期文件。但是代码将其存储在数组中并将其传递给数组时会引发错误。

Sub BatchProcessing()
    firstday = Date - Weekday(Date) + 2  'To get the 1st day of week
    lastday = Date - Weekday(Date) + 6   'To get the 5th day of week
    MyPath = "P:\Data\"                  'Path where my files were present       
    Dim Day
    Dim strArray(0 To 5) As String
     iCount=0
       For Day = firstday To lastday     'To loop through all 5 day files
          formatted_date = Format(Day, "yyyyMd")
          MyTemplate = "TestFile" & formatted_date & ".xlsx"   ' Set the template.
          Workbooks.Open MyPath & MyTemplate
          strArray(iCount) = ActiveWorkbook.Name   
          iCount = iCount+1    
       Next

    CreateStats(strArray)    'Calling a sub which will do the required calculation 
End Sub


Sub CreateStats(strArray As String)
 For Each element in strArray
    set OriginalWorkbook = strArray(i)
     'Do the processing'
 Next
End Sub

【问题讨论】:

@Sam :我现在已经编辑了数组声明。但是上面的代码现在会将名称存储在数组中吗?以及如何传递另一个函数? 您应该在代码中设置断点以查看数组是否按预期填充,并查看维度是否正确。要将其传递给子过程,您必须更改过程以接受数组作为参数。 @Sam 数组正在根据需要填充。但是如何将数组中的值设置为数组作为变量传递的子中的变量 OriginalWorkbook?我在上面提到的代码中也添加了该子的详细信息 我在下面更新了我的原始答案,提供了有关如何传递数组的更多信息。 【参考方案1】:

您的strArray 变量是Single 类型。如果您希望该变量为字符串数组,则必须将其声明为:

Dim strArray(0 to 5) As String

编辑:

既然您已将代码更改为使用strArray() As String 而不是strArray As Single,您应该更新您的CreateStats 子过程以接受一个数组作为参数。它现在应该看起来像这样:

Private Sub CreateStats(myArray() As String)

正如你现在所拥有的,你的过程只接受一个字符串。它必须接受一个字符串数组。一旦你有了它,你就可以遍历每个字符串并进行处理。

【讨论】:

【参考方案2】:

通过将您的数组命名为strArray,您似乎将拥有一个字符串数组,实际上您尝试在其中存储工作簿名称。但是,您将数组声明为 Single,它是一种数值数据类型。根据您的CreateStats(strArray) sub 所做的事情,您可能需要将其从 Single 更改为 String,或者可能设置另一个数组来保存 Single,而这个数组来保存 String。

【讨论】:

以上是关于Excel VBA 宏中的数组的主要内容,如果未能解决你的问题,请参考以下文章

如何将列值转换为vba宏中的行

VBA Word 从 Excel 中查找和替换 /&-

如何使用 VBA 在 Excel 宏中删除具有两列的重复项?

Excel VBA - 组合宏以重命名工作表和宏以在一个宏中合并工作表

将多维数组传递到 VBA 中的 Excel UDF

VBA宏运行速度为啥比Excel自带函数慢