我编写了下面的代码,将单元格的当前值输入到字符串数组中。如果我在第二个" Do"按F5后,代码运行得非常快(秒)。如果没有输入休息,则需要很长时间(6-8分钟)。
有没有人知道为什么会发生这种情况以及如何解决这个问题?
最佳, Nasos
Do
ProjectIDPub(i, 0) = Cells(3 + i, 13).Value & " - " & Cells(3 + i, 3).Value
ProjectIDPub(i, 1) = Cells(3 + i, 7).Value
i = i + 1
Loop Until i = numberRowsAXProjectsSheetPub
i = 0
Do
Cells(3 + i, 14).Value = ProjectIDPub(i, 0)
Cells(3 + i, 15).Value = ProjectIDPub(i, 1)
i = i + 1
Loop Until i = numberRowsAXProjectsSheetPub
i = 0
答案 0 :(得分:3)
假设numberRowsAXProjectsSheetPub
是数组ProjectIDPub
中的行数,整个第二个循环可以替换为
Range(Cells(3,14),Cells(3 + numberRowsAXProjectsSheetPub - 1,15)).Value = ProjectIDPub
在单个赋值中而不是在循环中将数组传输到工作表几乎总是快得多。
答案 1 :(得分:1)
您是否尝试在禁用屏幕更新的情况下运行这些循环?
Application.ScreenUpdating = False
Do
ProjectIDPub(i, 0) = Cells(3 + i, 13).Value & " - " & Cells(3 + i, 3).Value
ProjectIDPub(i, 1) = Cells(3 + i, 7).Value
i = i + 1
Loop Until i = numberRowsAXProjectsSheetPub
i = 0
Do
Cells(3 + i, 14).Value = ProjectIDPub(i, 0)
Cells(3 + i, 15).Value = ProjectIDPub(i, 1)
i = i + 1
Loop Until i = numberRowsAXProjectsSheetPub
i = 0
Application.ScreenUpdating = True
正如@ ali-srn问的那样,为什么你需要两次运行相同的循环?如果第二个循环访问一些需要由第一个循环创建的数据,那么如果需要,你应该能够使用i
的一些偏移来改变它,并且只运行一次。