Arrays VBA-创建多维数组的数组

Arrays VBA-创建多维数组的数组,arrays,excel,vba,multidimensional-array,outlook,Arrays,Excel,Vba,Multidimensional Array,Outlook,为了提高大型电子表格VBA代码的性能,我将表格转换为程序可以引用的字符串的2D数组,而不是在内存密集型电子表格中保持打开和循环。这些工作表大大降低了我的计算机速度,目前宏的速度比手工慢(我已经删除了许多不必要的列,并删除了这些工作表中的所有格式,而且似乎没有任何公式超出使用范围——它们也存储为.xlsb。它们的大小已经是原始大小的一半到三分之二,因此我认为没有其他方法可以优化它们) 请注意,我是在outlook中开发的,但在很大程度上依赖excel工作表中的数据-该用例是一个电子邮件自动响应程序

为了提高大型电子表格VBA代码的性能,我将表格转换为程序可以引用的
字符串的2D数组,而不是在内存密集型电子表格中保持打开和循环。这些工作表大大降低了我的计算机速度,目前宏的速度比手工慢(我已经删除了许多不必要的列,并删除了这些工作表中的所有格式,而且似乎没有任何公式超出使用范围——它们也存储为.xlsb。它们的大小已经是原始大小的一半到三分之二,因此我认为没有其他方法可以优化它们)

请注意,我是在outlook中开发的,但在很大程度上依赖excel工作表中的数据-该用例是一个电子邮件自动响应程序,它在工作表中搜索电子邮件中提供的ID,然后使用工作表中的电话号码回复该电子邮件。我有适当的参考资料,程序可以很好地(痛苦地)打开工作表慢慢地

我想使用嵌套的
For
循环以编程方式将电子表格加载到数组中,然后将这些数组存储在另一个数组中,以便它们可以依次循环。在我的研究中,我发现了在VBA()中生成锯齿状数组的代码,在VBA()中生成二维数组的代码,但在二维数组中却没有

这是我编写的代码,用于生成2D数组,
Dim
ReDim
行抛出语法错误

For k = LBound(sheetsArr) To UBound(sheetsArr)
        Dim myWbksArr(k)() As String
        ReDim myWbksArr(k)(sheetsArr(k).UsedRange.Rows.Count, sheetsArr(k).UsedRange.Columns.Count)
Next k
其中,
sheetsArr
是一个
工作表数组,我将引用的工作表复制到其中,以避免另一个
for
循环使用

Dim sheetsArr() As Worksheet, runningIndex As Long
runningIndex = 0
ReDim sheetsArr(1 To totalSheets) 'It would make sense to me to extend this syntax to an array as above, since an array is itself a type/object in other languages 
For j = LBound(myWbks) To UBound(myWbks) 'j iterates through the workbooks
    Set myWbks(j) = Workbooks.Open(FileName:=arr(j), UpdateLinks:=False)   'false should suppress update links msgbox
    For Each sh In myWbks(j).Worksheets 'iterates through the worksheets in each workbook
        sheetsArr(runningIndex) = sh  'add the worksheet to an array of worksheets so we don't have to use another for loop to get through the workbook layer too
        runningIndex = runningIndex + 1
    Next
Next j
使用for循环创建二维数组的正确语法是什么?

也许这会有所帮助。 它将把所有打开的工作簿的内容读入数组

您可能希望更改要存储的选定范围的方法,甚至可能更改决定要浏览哪些工作簿的方法。但这应该会让您了解:

Option Explicit
Sub wbtoArr()
    Dim wbsArr, wbArr
    Dim WB As Workbook, WS As Worksheet
    Dim I As Long, J As Long

ReDim wbsArr(1 To Workbooks.Count)
J = 0
For Each WB In Workbooks
    J = J + 1
    ReDim wbArr(1 To WB.Worksheets.Count)
    I = 0
    For Each WS In WB.Worksheets
        I = I + 1
        wbArr(I) = WS.UsedRange
    Next WS
    wbsArr(J) = wbArr
Next WB

End Sub

“要设置具有多个维度的数组,只需在数组名称的圆括号中的第一个数字后添加一个逗号,然后再添加另一个数字。如下所示:
将MyArray(5,4)设置为整数
”这与设置锯齿状数组没有什么不同。“锯齿状”部分只是2D。也许,您需要数组的集合?@Comintern您是对的,但是我认为的语法将
Dim
数组中存储的2D数组--
Dim myWbksArr(k)()作为字符串ReDim myWbksArr(k)(sheetsArr(k).UsedRange.Rows.Count,sheetsArr(k).UsedRange.Columns.Count)
(将数组元素暗显为数组w/(),按@Marcucciboy2的注释中的建议使用(行、列)将其重新暗显到正确的维度)不起作用--您能给我正确的语法吗?请参阅上的回答。