0
Ich habe eine Routine, die sehr gut funktioniert. Das einzige Problem ist, dass die Ausführung zu lange dauert. Können Sie Vorschläge machen, wie Sie es beschleunigen können? Ich denke, eine Möglichkeit besteht darin, Werte direkt Bereichen zuzuordnen, anstatt das Blatt auszuwählen und dann das Objekt activesheet zu verwenden.Wie beschleunige ich meine Codeausführung?
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
Ein guter Weg, um Ihren Makro zu beschleunigen verwenden 'Application.ScreenUpdating = false' und' Application.Calculation = xlManual' und 'Application.EnableEvents = false'. Stellen Sie sicher, dass Sie sie auf "True" und "XlAutomatic" und "True" zurückstellen, bevor Sie das Sub-Menü verlassen. [see] (http://stackoverflow.com/questions/13016249/how-to-improve-the-speed-of-vba-macro-code) – Raystafarian
Was machen die xlManual und EnableEvents? – Brad
Das ist wirklich nicht die richtige Plattform dafür. Siehe http://codereview.stackexchange.com/. Sie möchten auch aufhören '' Select 'zu verwenden, siehe [HIER] (http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros). Eine andere Sache, die verwendet werden kann, ist, Arrays zu verwenden, anstatt sich ständig auf ein Excel-Blatt zu beziehen. –