更新图形并在图纸之间复制值



我有一个大型Excel工作表,它使用VBA代码更新值并将值从一个工作表复制到另一个。我希望优化脚本,使其运行时间更短。

宏的目的是允许保存历史数据,同时能够更新显示页面上的值
历史数据存储在";每日平均值(年(";而当前数据处于"0"状态;化学成本";。

以下是一个片段,并继续用于定义x轴范围的累积趋势。

Sub Daily()
Dim X As Integer
X = WorksheetFunction.Lookup(Range("Look_up_day"), Worksheets("Daily Avgs (year)").Rows("3:3"), Worksheets("Daily Avgs (year)").Rows("2:2"))
Sheets("Chem Cost").Range("ACPT").Copy
Sheets("Daily Avgs (year)").Cells(4, X).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Chem Cost").Range("Grade1").Copy
Sheets("Daily Avgs (year)").Cells(18, X).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Chem Cost").Range("Grade2").Copy
Sheets("Daily Avgs (year)").Cells(30, X).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Chem Cost").Range("Grade3").Copy
Sheets("Daily Avgs (year)").Cells(42, X).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'average cost per thousand squared ft
Sheets("Chem Cost").Range("ACPMSF").Copy
Sheets("Daily Avgs (year)").Cells(91, X).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'x_axis range set up for cumulative trend ($/ton)
'chemA
Sheets("Chem Cost").ChartObjects("Chart 11").Chart.Axes(xlCategory).MinimumScale = Sheets("Daily Avgs (year)").Range("D1").Value
Sheets("Chem Cost").ChartObjects("Chart 11").Chart.Axes(xlCategory).MaximumScale = Sheets("Daily Avgs (year)").Range("G1").Value
'chemB
Sheets("Chem Cost").ChartObjects("Chart 20").Chart.Axes(xlCategory).MinimumScale = Sheets("Daily Avgs (year)").Range("D1").Value
Sheets("Chem Cost").ChartObjects("Chart 20").Chart.Axes(xlCategory).MaximumScale = Sheets("Daily Avgs (year)").Range("G1").Value
'chemC
Sheets("Chem Cost").ChartObjects("Chart 21").Chart.Axes(xlCategory).MinimumScale = Sheets("Daily Avgs (year)").Range("D1").Value
Sheets("Chem Cost").ChartObjects("Chart 21").Chart.Axes(xlCategory).MaximumScale = Sheets("Daily Avgs (year)").Range("G1").Value
'chemD
'...repeated for 40 charts.
End Sub

这不是一个合适的问题,因为没有办法直接提供解决方案,但可能会让每个人都想到的一件显而易见的事情是您使用Select和Copy Paste Value。这两者都会产生各种不必要的活动。相反,只需设置值。

示例:

Sheets("Daily Avgs (year)").Cells(4, X).value = Sheets("Chem Cost").Range("ACPT").value

此外,最好使用Long而不是integer,以防数据增长超过32k行,因为这样做更好。

如果你在谷歌上搜索如何加速我的宏(关闭调用、事件、屏幕更新等(,其他提高速度的标准技术也在那里