【问题标题】:excel - VBA - I cannot refresh a shape conditional formatting linked to a formulas after a cell refreshexcel - VBA - 在单元格刷新后,我无法刷新链接到公式的形状条件格式
【发布时间】:2018-11-20 17:49:51
【问题描述】:

我需要你的帮助。 上下文:我有一个 VBA 可以将颜色(绿色、橙色、红色)更改为与 % 值相关的几个形状。这些值将根据列表框而改变。但是,如果 % 发生变化,则格式不遵循。

宏如下所示 - 您知道如何“强制”刷新以使形状格式跟随任何单元格更改吗?以下尝试强制失败。

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

【问题讨论】:

  • 请修正您的代码格式
  • 嗨蒂姆,谢谢你,我只是尝试重新编辑它并按照说明中提到的那样放置 4 个空格 - 抱歉,这是我的第一篇文章,这意味着我花了几个小时来解决这个问题我来的时候我需要专家的眼睛来帮助我;)提前谢谢。
  • 我为你做了一个开始 - 你现在需要做的就是修复缩进...
  • 如果没有直接在您监控的单元格中进行更改,您可能需要响应Calculate 事件
  • 请问你会怎么做?

标签: excel vba


【解决方案1】:

试试这个:

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

【讨论】:

  • 非常感谢 :) 如果我愿意,还有一个问题 Tim - 与 K16 已填充但 L16 为空的情况相比,您将如何做到这一点,只有 Oval1 被刷新,而 Oval2 会像 ex 一样变白. - 如果可以的话,只是一个点缀。
  • 感激不尽 - 效果很好,非常感谢
【解决方案2】:
如果用户手动更改任何单元格,

Worksheet_Change 将启动。如果您的任何公式(如 RANDBETWEEN)会带来新的价值,则不会触发它。

您可能有兴趣将您的例程重铸为 VOLATILE 类型的 VBA 公式。单击链接以遵循一些说明。长话短说 - 您可以将一个特殊命令放入您的用户定义函数中,这样每次您的工作簿中发生更改时它都会运行。您可以将该公式放入 $K$16 单元格中。

希望对您有所帮助。

【讨论】:

  • 谢谢 Roman - 你知道如何将这个 volatile 函数放入我上面的宏中,还是我真的需要一个新模块,如果是,如何回调 $K$16 单元格 -范围是从 K:16 - W:16,每个都有一个专用的格式化形状。谢谢
  • $K$16 单元格中的确切公式是什么?新的 UDF 将复制它的计算并重复您的 SUB 代码。
  • 它指的是另一个工作表上的计算 =IFERROR('Graph Data'!C303,"") 并且 C303 具有以下公式: =IF('GM Track'!E3="Act ",'GM Track'!E56/'GM Track'!E58,NA())
猜你喜欢
  • 2021-11-21
  • 2013-04-18
  • 1970-01-01
  • 2020-01-02
  • 2013-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-27
相关资源
最近更新 更多