我在VBA for Excel中编写了一个函数,根据2个不同的值为单元格的字体分配字母和颜色代码。
基本上,该函数有2个参数用于比较值和包含字母和颜色的单元格。我使用webdings字体,所以字母看起来像一个符号。
我知道这可以通过conditionnal格式完成,但是这个函数将在我的工作簿中大量调用,在多个工作表中,我发现随着时间的推移使用VBA函数更容易维护并将所有内容放在同一个的地方。
问题:“currentCell.Font.Color”的使用正在缓慢地降低Excel的速度。即使我在工作簿打开时初始化了常量颜色,也使用了我在网上找到的一些优化技巧等。
你知道为什么字体颜色的变化会大大减慢Excel的速度吗?
此致
Const DefUnderBudget = 0.95
Const DefOverBudget = 1.05
Const FavMoyen = 0.98
Const DefMoyen = 1.02
Const FavOverBudget = 1.05
Const FavUnderBudget = 0.95
Const SMALL = "="
Const BIG = "n"
Global RED As Long
Global BLUE As Long
Global YELLOW As Long
Sub InitColors()
RED = RGB(218, 150, 148)
BLUE = RGB(149, 179, 215)
YELLOW = RGB(243, 202, 38)
End Sub
Function setPerformanceIndicator(actualVal As Double, compVal As Double, currentCell As Range) As String
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.EnableEvents = False
If actualVal < compVal * DefUnderBudget Then
currentCell.Font.Color = RED
setPerformanceIndicator = BIG
ElseIf actualVal < compVal * FavMoyen Then
currentCell.Font.Color = YELLOW
setPerformanceIndicator = SMALL
ElseIf actualVal > compVal * FavOverBudget Then
currentCell.Font.Color = BLUE
setPerformanceIndicator = BIG
Else
setPerformanceIndicator = vbNullString
End If
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Application.EnableEvents = True
End Function
答案 0 :(得分:1)
从技术上讲,Windows可能需要多次刷新屏幕。
在多次通话之前,请运行
Application.ScreenUpdating = False
之后,运行
Application.ScreenUpdating = True