Excel-VBA-单元格刷新后,我无法刷新链接到公式的形状条件格式

时间:2018-11-20 17:49:52

标签: excel vba

我需要你的帮助。 上下文:我有一个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

2 个答案:

答案 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