我有一个数组,它从多个工作表中获取数据,以打印到单个工作簿中的摘要表。单步执行代码时,数组似乎正在通过所有工作表抓取正确的数据。然后,数组应该在每次循环中保存信息到排序列表。
源数据由两个并排(水平)部分组成,代表两个工人。就形成而言,每个工人的数据是相同的。
我的列表未打印到摘要页面,而list.count似乎存在问题。如果我有list.count -1那么for循环根本不运行。如果我省略-1,那么我得到一次循环。
列表中存储的数组和/或汇总表的列表输出有什么问题?
Dim arTemp
Dim arTemp1
Dim d As Date
Dim x As Long, Y As Integer
Dim ws As Worksheet
Dim list As Object, list1 As Object
Set list = CreateObject("System.Collections.SortedList")
Set list1 = CreateObject("System.Collections.SortedList")
For Each ws In Worksheets
If ws.Name <> "Summary" And ws.Name <> "SheetX" Then
With ws
For y = 3 to 7
d=DateSerial(Year(.Cells(3,y)), Month(.Cells(3,y)),1
If List.containskey(d) then
arTemp = list(d)
arTemp1 = list1(d)
Else
ReDim arTemp(13)
ReDim arTemp1(13)
End If
arTemp(0) = arTemp(0) + .Cells(4,y)
arTemp(1) = arTemp(1) + .Cells(5,y)
arTemp(2) = arTemp(2) + .Cells(6,y)
.
.
.
arTemp(12) = arTemp(12) + .Cells(16,y)
arTemp(13) = arTemp(13) + 1
list(d) = arTemp
arTemp1(0) = arTemp1(0) + .Cells(4,y + 11)
arTemp1(1) = arTemp1(1) + .Cells(5,y + 11)
arTemp1(2) = arTemp1(2) + .Cells(6,y + 11)
.
.
.
arTemp1(12) = arTemp1(12) + .Cells(16,y + 11)
arTemp1(13) = arTemp1(13) + 1
list1(d) = arTemp1
Next
End With
End If
Next
With Worksheets("Summary")
.Cells.Delete
For x = 0 To list.Count - 1
d = list.getkey(x)
.Cells(x + 43, 1) = Year(d)
.Cells(x + 43, 2) = Month(d)
.Cells(x + 43, 3) = list(d)(0)
.Cells(x + 43, 4) = list(d)(1)
.
.
.
.Cells(x +43, 15) = list(d)(12)
Next
For x = 0 To list.Count - 1
d = list1.getkey(x)
.Cells(x + 43, 1) = Year(d)
.Cells(x + 43, 2) = Month(d)
.Cells(x + 43, 3) = list1(d)(0)
.Cells(x + 43, 4) = list1(d)(1)
.
.
.
.Cells(x +43, 15) = list1(d)(12)
Next
End With
答案 0 :(得分:0)
由于这是一个庞大的电子表格,我将我的初始测试字段缩小为两个数组。问题是我的列表计数器没有递增,因为它们指向的列表在我的实际代码中已被注释用于测试目的。因此,后续列表(list1,list2,list3 ......)仅限于“初始”列表中的记录数。因此,没有任何东西可以触发数据输出的For循环:list.Count - 1没有值,因此跳过For循环。
由于每个列表具有相同数量的记录,我的初始条件只是使用第一个列表的索引作为所有后续列表的边界。但是,如果未运行第一个列表(在测试期间),则会中断。最好的解决方案是让每个列表的循环检查它自己的个别边界。
For x=0 to list.Count -1
d=list.getkey(x)
do stuff
Next
For X=0 to list1.Count-1
d=list1.getkey(x)
do stuff
Next