Arrays 在vba中,如何重新定义作为另一个数组元素的数组

Arrays 在vba中,如何重新定义作为另一个数组元素的数组,arrays,vba,Arrays,Vba,我有6个动态数组。我想在另一个数组中包含这6个数组的名称。然后,我想一次选择6个动态数组中的每一个,并将所选数组重新划分为由输入文件中的行数确定的大小。我使用的代码给了我一个编译错误,请参见以下内容: '================================================================ ' DICTIONARIES ' Dim FilePathNames As Dictionary

我有6个动态数组。我想在另一个数组中包含这6个数组的名称。然后,我想一次选择6个动态数组中的每一个,并将所选数组重新划分为由输入文件中的行数确定的大小。我使用的代码给了我一个编译错误,请参见以下内容:

    '================================================================
    ' DICTIONARIES
    '
    Dim FilePathNames               As Dictionary
    Dim WorkBookNames               As Dictionary
    Dim Sheet1Names                 As Dictionary
    Dim Sheet2Names                 As Dictionary
    '==============================================================
    ' GENERIC WORKBOOK OBJECT NAMES
    ' XXX(0) = FULL WORKBOOK PATH
    ' XXX(1) = WORKBOOK NAME
    ' XXX(2) = WORKSHEET1 NAME
    ' XXX(3) = WORKSHEET2 NAME (FieldXControl)
    ' XXX(4) = NUMBER OF ROWS IN WORKSHEET1
    ' XXX(5) = NUMBER OF ROWS IN WORKSHEET2
    Public XXX(6) As Variant
    Public CCC()  As Variant
    Public Keys() As String
    '================================================================
    Dim CMI()     As String
    Dim CML()     As String
    Dim CMN()     As String
    Dim CM1()     As String
    Dim CM2()     As String
    Dim CMS()     As String


    'Changed the code as suggested 
    CCC = Array(CMI, CML, CMN, CM1, CM2, CMS)


    'The following code is placed between a For loop 
    'Will loop through this 6 times conditioned on the For loop
    'Not a simple 0, 1, 2 etc.
    '
    Call DictionaryKeys(R)  'R is an integer conditioned by the For loop
    Call ObjectNames(Keys)
    Call ActivateFile       'A Sub that will activate XXX(1)
    XXX(4) = GetLastRowExt(XXX(1), XXX(2), "A") 'Function to get last row of XXX(2)
    XXX(5) = GetLastRowExt(XXX(1), XXX(3), "A") 'Function to get last row of XXX(3)

    ReDim CCC(N)(XXX(5) - 2)     '<===========Get a Sytax erro
                                 'Hope you can see what I'm trying to do
                                 'N is an integer between 0 and 5
                                 'How do I code for this?
    Go and do other stuff
    Next                         'End of For loop



    Public Sub ObjectNames(XXK As String)
    XXX(0) = FilePathNames.Item(XXK)
    XXX(1) = WorkBookNames.Item(XXK)
    XXX(2) = Sheet1Names.Item(XXK)
    XXX(3) = Sheet2Names.Item(XXK)
    End Sub
'================================================================
“字典
'
将文件路径名设置为字典
将工作簿名称设置为字典
将名称作为字典
Dim Sheets 2名称为字典
'==============================================================
'通用工作簿对象名称
“XXX(0)=完整工作簿路径
'XXX(1)=工作簿名称
“XXX(2)=工作表1名称
“XXX(3)=工作表2名称(FieldXControl)
“XXX(4)=工作表1中的行数
“XXX(5)=工作表2中的行数2
公共XXX(6)作为变体
公共CCC()作为变体
公钥()作为字符串
'================================================================
Dim CMI()作为字符串
Dim CML()作为字符串
Dim CMN()作为字符串
Dim CM1()作为字符串
Dim CM2()作为字符串
Dim CMS()作为字符串
'按建议更改了代码
CCC=阵列(CMI、CML、CMN、CM1、CM2、CMS)
'以下代码位于For循环之间
'将在For循环的条件下在此循环6次
“不是简单的0、1、2等。
'
Call DictionaryKeys(R)'R是一个受For循环约束的整数
调用对象名(键)
调用ActivateFile'将激活XXX(1)的子文件
XXX(4)=GetLastRowExt(XXX(1),XXX(2),“A”)'函数以获取XXX(2)的最后一行
XXX(5)=GetLastRowExt(XXX(1),XXX(3),“A”)函数以获取XXX(3)的最后一行

ReDim CCC(N)(XXX(5)-2)“您不能直接调整内部阵列的大小,但您可以非常轻松地解决这一问题:

Sub Tester()

    Dim CMI()     As String
    Dim CML()     As String
    Dim CMN()     As String
    Dim CM1()     As String
    Dim CM2()     As String
    Dim CMS()     As String
    Dim CCC As Variant, arr, N As Long


    CCC = Array(CMI, CML, CMN, CM1, CM2, CMS)

    For N = LBound(CCC) To UBound(CCC)

       'ReDim CCC(N)(1 to N+5) 'no can do...

        arr = CCC(N)            'extract the inner array
        ReDim arr(1 To N + 5)   'resize it
        CCC(N) = arr            'put it back

    Next N

    For N = LBound(CCC) To UBound(CCC)
        Debug.Print LBound(CCC(N)), UBound(CCC(N))
    Next N
End Sub

您用字符串而不是数组填充了
CCC
CCC=阵列(CMI、CML、CMN、CM1、CM2、CMS)
OMW-这是一个错误,但在更正后仍然会得到一个错误。我现在得到一个语法错误在哪一行?在CCC(N)(XXX(5)-2)行。我想我已经得出结论,不可能访问一个数组中的元素,而这个元素是另一个数组中的元素。我想这样做,这样我就不会有大量重复的代码。在上面的代码中,我只显示了6个元素。在实时代码中,有15个元素,即3个一组15个数组。我不想要15块代码。我想要一段代码,它可以用一个通用的数组名来处理15个不同的数组。谢谢,我会尝试一下,然后告诉你它是如何运行的。我需要能够在一组代码中处理所有数组。但你给了我一个起点,我会看看我是否能发展它。