Ho scritto un codice VBA di Excel che genera uno scatterplot e modifica alcune proprietà del grafico. (Il codice è sotto per riferimento.) Il codice si sposta lentamente attraverso attività come l'eliminazione della legenda del grafico, la rimozione delle linee orizzontali/verticali e la modifica delle serie X e Y. Timer di Excel mi dà la durata di seguito per ogni attività:Manipolazione grafica VBA lenta
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
Rimozione della griglia, cambiando il titolo, tracciando il X e Y serie, e l'eliminazione la leggenda sembrano richiedere molto tempo. Ho cercato su Google modi alternativi per scrivere il codice, ma non sono riuscito a trovare nulla di utile. Il codice funziona interamente come previsto, fatta eccezione per la bassa velocità. Qualche idea su cosa sta causando la cattiva prestazione e su come posso accelerarla? Grazie in anticipo.
MODIFICA: ho già disattivato l'aggiornamento dello schermo mentre lavoravo con il grafico. Il grafico è generato/formattato mentre un modulo utente è aperto, se questo fa alcuna differenza.
Ecco il relativo frammento di codice:
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
Puoi pubblicare un campione della tua cartella di lavoro? – brettdj