Excel VBA宏中的数组
我有一个包含许多文件的文件夹,我需要从中打开本周的文件,将它们存储在一个数组中,将它们传递给子文件夹,并循环查看它们以获取摘要信息 我能够从下面的代码中获得所需的日文件。但是代码在将其存储在数组中并将其传递给数组时抛出了一个错误Excel VBA宏中的数组,excel,user-defined-functions,dynamic-arrays,vba,Excel,User Defined Functions,Dynamic Arrays,Vba,我有一个包含许多文件的文件夹,我需要从中打开本周的文件,将它们存储在一个数组中,将它们传递给子文件夹,并循环查看它们以获取摘要信息 我能够从下面的代码中获得所需的日文件。但是代码在将其存储在数组中并将其传递给数组时抛出了一个错误 Sub BatchProcessing() firstday = Date - Weekday(Date) + 2 'To get the 1st day of week lastday = Date - Weekday(Date) + 6 'To
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
您的
strArray
变量的类型为Single
。如果希望该变量为字符串数组,则必须将其声明为:
Dim strArray(0到5)作为字符串
编辑:
既然您已经将代码更改为使用strArray()作为字符串,而不是将strArray()作为单个字符串,那么您应该更新CreateStats
子过程以接受数组作为参数。现在应该是这样的:
私有子CreateStats(myArray()作为字符串)
现在,您的过程只接受一个字符串。它必须接受字符串数组。一旦有了它,就可以循环遍历每个字符串并进行处理。您的strArray
变量的类型为Single
。如果希望该变量为字符串数组,则必须将其声明为:
Dim strArray(0到5)作为字符串
编辑:
既然您已经将代码更改为使用strArray()作为字符串,而不是将strArray()作为单个字符串,那么您应该更新CreateStats
子过程以接受数组作为参数。现在应该是这样的:
私有子CreateStats(myArray()作为字符串)
现在,您的过程只接受一个字符串。它必须接受字符串数组。一旦你有了它,你就可以循环遍历每个字符串并进行处理。通过命名你的数组strArray
看起来你将拥有一个字符串数组,实际上你试图在其中存储工作簿名称。但是,您将数组声明为Single,这是一种数值数据类型。根据CreateStats(strArray)
sub所做的工作,您可能需要将其从Single更改为String,或者可能需要设置另一个数组来保存Single,而这个数组来保存String。通过命名数组strArray
,您似乎将拥有一个字符串数组,事实上,您试图在其中存储工作簿名称。但是,您将数组声明为Single,这是一种数值数据类型。根据CreateStats(strArray)
sub所做的工作,您可能需要将其从Single更改为String,或者可能需要设置另一个数组来保存Single,而这个数组来保存String。@Sam:我现在已经编辑了数组声明。但是上面的代码现在会将名称存储在数组中吗?如何将其传递给另一个函数呢?您应该在代码中设置一个断点,以查看数组是否按预期填充,以及维度是否正确。若要将其传递给子过程,必须更改过程以接受数组作为参数。@Sam数组正在按需要填充。但是如何将数组中的值设置为作为varaiable传递数组的子对象中的varaiable OriginalWorkbook?我已经在上面提到的代码中添加了该子元素的详细信息。我在下面更新了我的原始答案,并提供了有关如何传递数组的更多信息。@Sam:我现在已经编辑了数组声明。但是上面的代码现在会将名称存储在数组中吗?如何将其传递给另一个函数呢?您应该在代码中设置一个断点,以查看数组是否按预期填充,以及维度是否正确。若要将其传递给子过程,必须更改过程以接受数组作为参数。@Sam数组正在按需要填充。但是如何将数组中的值设置为作为varaiable传递数组的子对象中的varaiable OriginalWorkbook?我已经在上面提到的代码中添加了该子节点的详细信息。我已经在下面更新了我的原始答案,并提供了有关如何传递数组的更多信息。