VBA excel代码运行时间

时间:2016-09-29 11:44:33

标签: excel-vba vba excel

我编写了下面的代码,将单元格的当前值输入到字符串数组中。如果我在第二个" 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

2 个答案:

答案 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的一些偏移来改变它,并且只运行一次。