为什么我的VBA数组内容在我想要重用时消失?

我是VBA的新手,并且正在开发一个涉及数组的macros。

在数组部分,我需要从两个Excel工作簿中复制一些范围到两个单独的数组(timearray和guzikarray)。 然后我会尝试匹配两个数组,并将结果复制到第三个数组(masterarray)。 最后,我将把第三个数组的内容写回到工作表中。

但是我发现当我开始进行匹配时,我的前两个数组的内容被自动删除。 所以没有写回我的工作表。 任何人都能告诉我为什么?

'copy ranges to two arrays: timearray and guzikarray masterrows = mastersheet.UsedRange.Rows.count guzikrows = guziksheet.UsedRange.Rows.count ReDim timearray(1 To masterrows, 1 To 2) For i = 1 To i = masterrows timearray(i, 1) = Cells(i, 6).Value timearray(i, 2) = Cells(i, 10).Value Next ReDim guzikarray(1 To guzikrows, 1 To 6) For i = 1 To i = guzikrows guzikarray(i, 1) = guziksheet.Cells(i, 11).Value guzikarray(i, 2) = guziksheet.Cells(i, 17).Value guzikarray(i, 3) = guziksheet.Cells(i, 14).Value guzikarray(i, 4) = guziksheet.Cells(i, 16).Value guzikarray(i, 5) = guziksheet.Cells(i, 18).Value guzikarray(i, 6) = guziksheet.Cells(i, 26).Value Next 'match timearray and guzikarray, and then copied the results to masterarray ReDim Preserve masterarray(1 To masterrows, 1 To 4) For i = 2 To i = masterrows min = 100000 For j = 2 To j = guzikrows If timearray(i, 1) = guzikarray(j, 1) Then If timearray(i, 2) = guzikarray(j, 2) Then If guzikarray(j, 6) <> 0 Then masterarray(i, 1) = guzikarray(j, 4) masterarray(i, 3) = guzikarray(j, 3) If guzikarray(j, 5) < min Then min = guzikarray(j, 5) masterarray(i, 2) = min End If If timearray(i, 1) <> timearray(i + 1, 1) Then If timearray(i, 1) <> timearray(i - 1, 1) Then If guzikarray(j, 2) <> guzikarray(j - 1, 2) Then masterarray(i, 4) = guzikarray(j - 1, 5) End If End If End If End If End If Next Next 'write the results back to master array Range(Cells(2, 17), Cells(masterrows, 20)).Value = masterarray 

由于语法不正确,您的循环无法正常工作

For i = 1 To i = masterrows
立即退出而不填充arrays。 你应该使用

For i = 1 To masterrows
For i = 1 To guzikrows