Ich schrieb einige Excel-VBA-Code, der ein Streudiagramm generiert und einige Eigenschaften des Diagramms ändert. (Code ist unten als Referenz.) Der Code bewegt sich langsam durch Aufgaben wie Löschen der Diagrammlegende, Entfernen von horizontalen/vertikalen Gitternetzlinien und Ändern der X- und Y-Reihe. Excel-Timer gibt mir die folgende Dauer für jede Aufgabe:VBA Chart Manipulation Langsam
insert scatterplot: 0.01171875
delete series: 0
plot x vs y: 0.55859375
delete legend: 0.5703125
delete chart title: 0.66015625
remove grid: 1.3046875
format axes: 0
overall: 3.11328125
Entfernen des Gitters, die Änderung des Titels, Auftragen der X- und Y-Serie, und Löschen der Legende scheint eine lange Zeit in Anspruch zu nehmen. Ich habe nach alternativen Methoden gegoogelt, um den Code zu schreiben, aber ich konnte nichts Nützliches finden. Der Code funktioniert vollständig wie erwartet, außer für die langsame Geschwindigkeit. Irgendwelche Ideen, was die schlechte Leistung verursacht und wie ich das beschleunigen kann? Danke im Voraus.
EDIT: Ich habe bereits Bildschirmaktualisierung während der Arbeit mit dem Diagramm ausgeschaltet. Das Diagramm wird generiert/formatiert, während ein Benutzerformular geöffnet ist, wenn dies einen Unterschied macht.
Hier ist der relevante Code-Snippet:
With ActiveChart
'Delete all series currently in plot
Do While .FullSeriesCollection.Count > 0
.FullSeriesCollection(1).Delete
Loop
'Plot Actual (Y) vs. Inverse Distribution (X)
.SeriesCollection.NewSeries
.FullSeriesCollection(1).XValues = "=" & tempSheetName & "!$C:$C"
.FullSeriesCollection(1).Values = "=" & tempSheetName & "!$A:$A"
'Delete legend
.Legend.Delete
'Delete chart title
.SetElement (msoElementChartTitleNone)
'Remove gridlines
.SetElement (msoElementPrimaryValueGridLinesNone)
.SetElement (msoElementPrimaryCategoryGridLinesNone)
'Format axes
Dim xAxis As Axis, yAxis As Axis
Set xAxis = .Axes(xlCategory)
Set yAxis = .Axes(xlValue)
With yAxis
'Title y axis "actual"
.HasTitle = True
.AxisTitle.Caption = "Actual"
'Add tick marks
.MajorTickMark = xlOutside
End With
With xAxis
'Title x axis by dist type
.HasTitle = True
.AxisTitle.Caption = dist.getDistType
'Add tick marks
.MajorTickMark = xlOutside
End With
End With
Können Sie ein Beispiel Ihrer Arbeitsmappe posten? – brettdj