Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA宏中的数组_Excel_User Defined Functions_Dynamic Arrays_Vba - Fatal编程技术网

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?我已经在上面提到的代码中添加了该子节点的详细信息。我已经在下面更新了我的原始答案,并提供了有关如何传递数组的更多信息。