优化“复制”/“插入复制的单元格”代码

时间:2014-05-06 21:47:38

标签: vba excel-vba excel

我对VBA来说比较新,但是#34;招募了#34;由我公司帮助制作资源预测工具。从我运行脚本到完成脚本的时间我得到了6秒的延迟,如果可能的话,我真的想把它缩短到1或2秒。

作为旁注,我可能有一个荒谬的数字" IF"," Index / Match""" Indirect&# 39; S"在我的Excel工作表中,所有内容都在从K列到EY列的一周结束日期...我不确定这是我的问题还是我的代码中的问题。

作为一个FYI,这里是一个excel公式的例子 - 如果它似乎超载了我应该改变它随时让我知道

=IF(INDEX(INDIRECT("$A$3:$M$"&$K$4)),MATCH($B26,INDIRECT("$K$3:$K$"&$K$4)),0),COLUMN(F26))<40000,"InputDate",INDEX(INDIRECT("$A$3:$M$"&$K$4),MATCH($B26,INDIRECT("$K$3:$K$"&$K$4)),0),COLUMN(F26))))

这是我的VBA代码分三个步骤 Marco4() - 在项目描述表中插入行, CopyM() - 从项目表创建一个字符串(Client Name,Proj#,Project name) 项目摘要() - 复制最后7行的范围,然后在最后一行下面插入1行。

Sub NewProject()

Macro4
CopyM
ProjectSummary

End Sub
----------------------------------------------------------   
Sub Macro4()
'insert a new line in the project description field (top)
Range("A1").End(xlDown).End(xlDown).Offset(1).EntireRow.Insert Shift:=xlDown,      
CopyOrigin:=xlFormatFromLeftOrAbove
Range("G3").Copy Destination:=Range("H1").End(xlDown).End(xlDown)

End Sub
-----------------------------------------------------------
Sub CopyM()
'Copy range of cells in column K which correspond only to project description field

Dim rng As Range
Dim rng2 As Range

Set rng = ActiveSheet.Range("K1").End(xlDown).End(xlDown)
Set rng2 = rng.Offset(1)
rng.Copy Destination:=rng2
Application.CutCopyMode = False

End Sub
------------------------------------------------------------
Sub ProjectSummary()

Dim lastrowe As Integer
Dim lastrowb As Integer
Dim pnext As Integer

lastrowe = Range("D2000").End(xlUp).Offset(2).Row
lastrowb = Range("A2000").End(xlUp).Offset(-1).Row
Rows(lastrowb & ":" & lastrowe).Copy
pnext = Range("D2000").End(xlUp).Offset(3).Row
Rows(pnext).Insert Shift:=xlDown

End Sub 

1 个答案:

答案 0 :(得分:0)

INDIRECT是一个易失性函数,因此只要工作簿完成,它就会重新计算,即使它的输入没有改变。我建议使用INDEX:= IF(INDEX($ A $ 3:INDEX($ M:$ M,$ K $ 4),MATCH($ B26,$ K $ 3:INDEX($ K:$ K,$ K $ 4) ),0),COLUMN(F2 6))≤; 40000, “InputDate”,INDEX($ A $ 3:INDEX($ M:$ M,$ķ$ 4),MATCH($ B26,$ķ$ 3:INDEX( $ K:$ K,$ K $ 4),0),COLUMN(F26))))这是半易失性的,因此只会在工作簿打开或输入改变时重新计算。 - 罗里5月8日12:41