我知道这篇文章会引起很多仇恨和沮丧,但我不知道还有什么地方可以让别人知道为什么我的excel按照它的方式行事。如果有一个论坛,请告诉我,以便我将来不会发布“非正统”的帖子。
我的问题详情:
我创建了一个几乎完全自动化的工资单excel文件,其中包含在Worksheet deactivate
事件上激活的公式和VBA代码。但是,我没有cell change events
,但即便如此,如果我输入一个单元格,即使它没有公式或VBA脚本,我的excel也将进入处理模式并完全挂起我的PC 10-15分钟。当脚本激活时,它们有时可能会在接下来的10-15分钟内冻结我的PC,有时它会在几秒钟内完成。我不能alt + tab,我不能破坏脚本,我无法退出excel文件,而且我无法打开任务管理器。我不能在这里粘贴我的代码,因为它似乎不是代码问题而且它太长了。
我的代码中有70%位于Worksheets("DTR")
对象中
我的代码中有20%位于Worksheets("Payroll Update")
对象中
我的代码的10%位于Worksheets("DTR Summary")
,Worksheets("Payroll Summary")
和ThisWorkbook
。
有人可以评论这些代码吗?我没有要求崩溃文件的极其苛刻的脚本。我不明白为什么会这样。请参考下面的文件我真的很感激任何建议让事情运行得更快。
答案 0 :(得分:2)
=SUMIFS(DTR!$AB$2:$AB$1048576,DTR!$C$2:$C$**1048576**,">="&$A6,DTR!$C$2:$C$1048576,"<="&$B6,DTR!$B$2:$B$1048576,'Payroll - Extra'!Q$1)
3.使用变体数组更快。 test()是将结果一对一地分配给单元格,代码很慢。 这段代码在我的电脑上耗时5.33秒。
Sub test()
Dim i As Long, j As Long
Dim s, e, t
Cells.Clear
s = Timer
For i = 1 To 10000
For j = 1 To 20
Cells(i, j) = i
Next j
Next i
e = Timer
t = e - s
Range("v1") = t
End Sub
以下代码(test2())使用数组变量,只需0.5秒。
Sub test2()
Dim i As Long, j As Long
Dim vArray(1 To 10000, 1 To 20)
Dim s, e, t
Cells.Clear
s = Timer
For i = 1 To 10000
For j = 1 To 20
vArray(i, j) = i
Next j
Next i
Range("a1").Resize(10000, 20) = vArray
e = Timer
t = e - s
Range("v1") = t
End Sub