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 在 Excel 宏中删除具有两列的重复项?