引用一个数组(在一个数组中)

我的小组想要做的是:
取一个数组(例如(1到100,1到36),包含在数组中)
只需要一些列(例如,我只想要列2,5,7等)
将原始数组replace为只包含那些列的数组(所以它将从(1到100,1到36)到例如(1到100,1到5))。
我通过将我想要的列复制到一个新的数组中,然后擦除原始数据并仅使用新的信息重新创build它。

注意,我所有的数组都是dim arrVariable as Variant变体首先dim arrVariable as VariantarrVariable = Array()我有一个数组数组arrAggregatedArrays(1 to 8)

我分的相关部分是:

 FilterSheetArrayForColumns (ArrAggregatedArrays(i)) Private Sub FilterSheetArrayForColumns(ByRef arrSource As Variant) '/====================================================================================================================================================== '/ Author: Zak Armstrong '/ Email: zak.armstrong@luminwealth.co.uk '/ Date: 12/August/2015 '/ '/ Description: Takes Sheet arrays, finds the columns from the colAllHeadings, recreates the array with just that data (and empty columns for the ones not found) '/====================================================================================================================================================== Dim i As Long Dim j As Long Dim k As Long Dim lngFinalRow As Long Dim lngFinalColumn As Long Dim arrTempArray As Variant '/ Temporarily holds the filtered information arrTempArray = Array() Dim arrHeadingsRow As Variant '/ Holds the top (headings) row for application.match arrHeadingsRow = Array() Dim varColumnPosition As Variant '/ Holds the position of the relevant column Dim strHeading As String '/ The current heading to search for '/====================================================================================================================================================== AssignArrayBounds arrSource, UB1:=lngFinalRow, UB2:=lngFinalColumn '/================================================== '/ Recreate Headings Row '/================================================== ReDim arrHeadingsRow(1 To lngFinalColumn) For i = 1 To lngFinalColumn arrHeadingsRow(i) = arrSource(1, i) Next i '/================================================== '/ Find Columns, put in array '/================================================== ReDim arrTempArray(0 To lngFinalRow, 0 To ColAllHeadings.Count) arrTempArray(0, 0) = arrSource(0, 0) Dim lngDestinationColumn As Long Dim lngSourceColumn As Long For i = 1 To ColAllHeadings.Count strHeading = ColAllHeadings(i) varColumnPosition = Application.Match(strHeading, arrHeadingsRow, 0) If IsError(varColumnPosition) _ Then MissingDataHeadingsHandler arrSource, strHeading Else lngDestinationColumn = i lngSourceColumn = varColumnPosition CopyArrayColumn2d arrSource, arrTempArray, lngSourceColumn, lngDestinationColumn End If Next i CopyArrayContents2d arrTempArray, arrSource End Sub 

但是,在这个子结尾, arrAggregatedArrays(i)仍然包含原始数组,而不是过滤的数组。

我想我的代码可能只是擦除数组的引用,而不是数组本身。 如果是这样的话,我该如何正确引用它?

如果不是这种情况,那么variables引用出错了?

函数FilterSheetArray()不使用参数“arrSource”

尝试这个:

 FilterSheetArray(arrAggregatedArrays(i)) Sub FilterSheetArray(ByRef arrSource as variant) dim arrTemp as variant arrTemp = arrSource ' <---------------------- '/ fill arrTemp with specific columns from arrSource '/ Erase arrSource, ReDim and copy contents of arrTemp arrSource = arrTemp End Sub 

并确保在最后将“arrTemp”分配回“arrSource”

(或者只是使用“arrSource”并删除“arrTemp”)

我发现了这个问题。 我打电话给我的子使用这个语法:

 FilterSheetArrayForColumns (ArrAggregatedArrays(i)) 

当我应该使用:

 FilterSheetArrayForColumns ArrAggregatedArrays(i) 

在VBA中,无论何时在variables周围使用括号,都会强制VBA对其进行评估。 所以,在这种情况下,它没有传递variablesarrAggregatedArrays(i),而是一个评估(实际上是一个本地副本)。

因此,小组正在做它应该做的事情,而不是引用原来的variables,而只是改变一个本地副本,一旦副本结束,本地副本就会消失,而不改变原来的副本。