0
我有一个很好的例程。唯一的问题是执行时间太长。你能提出如何加速的建议吗?我认为一种方法是我直接将值赋给范围,而不是选择工作表,然后使用activesheet对象。如何加快我的代码执行速度?
Sub calculate()
Dim rng1 As Range
Dim lastCell As Range
Dim starFill As Range
'Dim LastCellRowNumber As Long
Dim strFind As String
Dim rng2 As Range
strFind = "***"
Dim clearFormat As Range
Dim demand As Range
Dim demandFill As Range
Dim supply As Range
Dim supplyFill As Range
Dim delta As Range
Dim deltaFill As Range
Dim i As Integer
Dim j As Integer
Dim rng3 As Range
Dim rng4 As Range
Dim lasteCell2 As Range
Dim rng5 As Range
Dim rng6 As Range
Dim mon As Range
Dim k As Integer
'save month values from resource plan for use in dashboard
Worksheets("Resource Plan").Columns("D:D").EntireColumn.Hidden = False
For j = 1 To 6
Worksheets("Resource Plan").Select
Set mon = ActiveSheet.Cells(2, (j + 9))
For k = 1 To 29
Select Case k
Case 5, 11, 17, 23, 29
Worksheets("Dashboard").Select
Worksheets("Dashboard").Cells(k, (j + 3)).Value = mon
Case Else
End Select
Next k
Next j
'calculate demand
Worksheets("Resource Plan").Select
Set rng4 = ActiveSheet.Columns("D").Find(strFind, , xlValues, xlWhole)
rng4.Select
Set lastCell2 = ActiveSheet.Cells(ActiveSheet.Rows.Count, (4)).End(xlUp)
Set rng5 = Range(rng4, lastCell2)
Set rng5 = rng5.Offset(0, 0).Resize(rng5.Rows.Count - 1)
For i = 0 To 29
Worksheets("Resource Plan").Select
Set rng1 = ActiveSheet.Columns("J").Find(strFind, , xlValues, xlWhole)
Set lastCell = ActiveSheet.Cells(ActiveSheet.Rows.Count, (10)).End(xlUp)
Set rng2 = Range(rng1, lastCell)
Set rng2 = rng2.Offset(4, i).Resize(rng2.Rows.Count - 5, rng2.Columns.Count)
rng2.Select
Selection.Copy
Worksheets("Sheet1").Select
Range("A1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Set rng3 = Sheets("Sheet1").Cells(1, 3)
rng3.Select
Selection.Copy
Worksheets("Results").Select
Cells(18, (i + 7)).Select
Selection.PasteSpecial Paste:=xlValues
Next i
Worksheets("Resource Plan").Select
Columns("D:D").EntireColumn.Hidden = True
Cells(1, 1).Select
'Worksheets("Dashboard").Select
End Sub
的一个好方法,以加快您的宏是使用'Application.Screenupdating = FALSE'和'Application.Calculation = xlManual'和'Application.EnableEvents = FALSE'。在退出子文件之前,务必将它们返回到“True”和“xlAutomatic”和“True”。 [见](http://stackoverflow.com/questions/13016249/how-to-improve-the-speed-of-vba-macro-code) – Raystafarian
xlManual和EnableEvents做什么? – Brad
这真的不适合这个平台。请参阅http://codereview.stackexchange.com/。你也想停止使用'.Select'参见[这里](http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros)。可以使用的另一件事是使用数组,而不是经常引用Excel表。 –