我需要你的帮助。 上下文:我有一个VBA,可以将颜色(绿色,橙色,红色)更改为链接到%值的几种形状。值将基于列表框而变化。但是,如果%更改,则格式不会遵循。
该宏如下所示-您是否知道如何“强制”刷新,以便Shape格式跟随任何单元格更改?下面试图强迫它失败。
Private Sub Worksheet_Change(ByVal Target As Range)
EnableFormatConditionsCalculation = True
If Target.Address = "$K$16" Then
With Sheets("Resources").Shapes("Oval 1")
If Sheets("Resources").Cells(16, 11).Value < 0.95 Then
.Fill.ForeColor.RGB = RGB(255, 0, 0)
Else If
Sheets("Resources").Cells(16, 11).Value > 0.99 Then
.Fill.ForeColor.RGB = RGB(0, 255, 0)
Else
.Fill.ForeColor.RGB = RGB(255, 153, 0)
End If
End If
End With
ElseIf Target.Address = "$L$16" Then
With Sheets("Resources").Shapes("Oval 2")
If Sheets("Resources").Cells(16, 12).Value < 0.95 Then
.Fill.ForeColor.RGB = RGB(255, 0, 0)
Else If Sheets("Resources").Cells(16, 12).Value > 0.99 Then
.Fill.ForeColor.RGB = RGB(0, 255, 0)
Else
.Fill.ForeColor.RGB = RGB(255, 153, 0)
End If
End If
End With
Range("K16:W16").Calculate
End If
End Sub
答案 0 :(得分:0)
Worksheet_Change 。如果您的任何公式(例如 RANDBETWEEN )会带来新的价值,则不会触发该事件。
您可能会对将例程重新转换为VOLATILE类型的VBA公式感兴趣。单击链接以遵循一些说明。长话短说-您可以在用户定义的函数中放置一个特殊命令,以便每次工作簿中发生更改时都将运行该命令。然后您可以将该公式放入 $ K $ 16 单元格中。
希望有帮助。
答案 1 :(得分:0)
尝试一下:
Private Sub Worksheet_Calculate()
CheckFormat Me.Range("K16"), "Oval 1"
CheckFormat Me.Range("L16"), "Oval 2"
End Sub
Sub CheckFormat(valueRange As Range, shapeName As String)
Dim v, clr As Long
v = valueRange.Value
If Len(v) = 0 Then
clr = RGB(255, 255, 255) '<< EDIT: use white if no value
Else
If v < 0.95 Then
clr = RGB(255, 0, 0)
ElseIf v > 0.99 Then
clr = RGB(0, 255, 0)
Else
clr = RGB(255, 153, 0)
End If
End If
Me.Shapes(shapeName).Fill.ForeColor.RGB = clr
End Sub