【问题标题】:Formula not working in VBA, but works in cell公式在 VBA 中不起作用,但在单元格中起作用
【发布时间】:2014-05-07 09:53:39
【问题描述】:

我正在做一个条件语句,并且我已经使用 VBA 自动化了我的电子表格。一切正常,直到涉及到这个公式。我猜它与文本字符串有关。我已经尝试过使用 & Chr(34) & 之前和之后,它也不起作用。

公式如下:
=IF(E2="RIA Review",IF(G2<=4,"Green",IF(G2=5,"Yellow","Red")), IF(E2="Delivery",IF(I2<=-7,"Green",IF(I2=-1,"Yellow","Red")),IF(E2="Launch/Close",IF(I2>=121,"Red",IF(I2>=111,"Yellow",IF(I2> =100,"Green","N/A"))),IF(OR(E2="Intent",E2="AE Review",E2="Initial Review",E2="AE Disposition"),IF(G2<=8,"Green",IF(OR(G2=9,G2=10)," Yellow",IF(G2>=11,"Red")))))))

这是 VBA 中的代码(它改变了单元格引用,我仍然很难知道它是否在谈论正确的单元格)

Range("H2").Select
ActiveCell.FormulaR1C1 = _
"=IF(RC[-3]=""RIA Review"",IF(RC[-1]<=4,""Green"",IF(RC[-1]=5,""Yellow"",""Red"")),IF(RC[-3]=""Delivery"",IF(RC[1]<=-7,""Green"",IF(RC[1]=-1,""Yellow"",""Red"")),IF(RC[-3]=""Launch/Close"",IF(RC[1]>=121,""Red"",IF(RC[1]>=111,""Yellow"",IF(RC[1]>=100,""Green"",""N/A""))),IF(OR(RC[-3]=""Intent"",RC[-3]=""AE Review"",RC[-3]=""Initial Review"",RC[-3]=""AE Disposition"")," & _
"]<=8,""Green"",IF(OR(RC[-1]=9,RC[-1]=10),""Yellow"",IF(RC[-1]>=11,""Red"")))))))"

任何帮助都会很棒!

【问题讨论】:

  • 1) 这里有问题:"]&lt;=8,""Green"" 2) ActiveCell.FormulaR1C1 接受长度小于 255 个字符的公式
  • ughghghghg 我讨厌这些嵌套公式。与其构建一个宏来执行如此丑陋的公式操作,不如构建一个执行所需验证的宏呢?实时更新可以通过工作表的Change事件来处理...
  • 大卫泽门斯不要粗鲁 - 为什么不提供帮助?你有没有想过我是一个初学者,不知道你在说什么?很难让丑陋的嵌套公式起作用。但我很自豪我发现了这一点。我只使用 excel 和 VBA 大约 3 个月,之前没有任何编码经验。下次提供真正的帮助,而不仅仅是对寻求帮助的人刻薄。

标签: vba excel


【解决方案1】:

根据我在您的决策公式中的理解,颜色将取决于 3 列:EG

使用最少的编码,您可以使用这 3 个范围输入创建一个用户定义的函数,因此其中任何一个更改都会自动更新颜色。

在单元格中输入颜色公式,如=ColorStatus(E2,G2,I2) 和模块中的代码下方。我还为不在您的任何检查中的 E 列添加了情况,而且条件略有不同但结果相同(假设值中没有小数)。

更新了 cmets 的“交付”颜色决定。

Function ColorStatus(E As Range, G As Range, I As Range) As String
    Dim sColor As String

    Select Case E.Value
        Case "RIA Review"
            ' Color determined by column G
            Select Case G.Value
                Case Is < 5:    sColor = "Green"
                Case 5:         sColor = "Yellow"
                Case Else:      sColor = "Red"
            End Select
        Case "Delivery"
            ' Color determined by column I
            Select Case I.Value
                Case Is < -6:   sColor = "Green"
                Case -1 To -6:  sColor = "Yellow"
                Case 0 To 99:   sColor = "Red"
                Case Else:      sColor = "Black" ' From 100 days
            End Select
        Case "Launch/Close"
            ' Color determined by column I
            Select Case I.Value
                Case Is > 120:  sColor = "Red"
                Case Is > 110:  sColor = "Yellow"
                Case Is > 99:   sColor = "Green"
                Case Else:      sColor = "N/A"
            End Select
        Case "Intent", "AE Review", "Initial Review", "AE Disposition"
            ' Color determined by column G
            Select Case G.Value
                Case Is < 9:    sColor = "Green"
                Case 9, 10:     sColor = "Yellow"
                Case Else:      sColor = "Red"
            End Select
        Case Else
            sColor = "Unknown State" ' Or change to "" to appear blank
    End Select
    ColorStatus = sColor
End Function

【讨论】:

  • 谢谢帕特里克!我今天将对此进行测试,看看我是否可以让它工作。交货很棘手。如果它比 I 列中的日期早 7 天,那么它是绿色的。日期前 1-6 天为黄色。如果它超过了日期,那么它是红色的。还有一个没有说明的条件,如果它超过了日期 100 天,那么它就是黑色的。
  • @user3605729 欢迎您,您可能希望分享这些列标题,因为我们不知道它们的用途和存储的数据类型。如果不是文本,我假设只有整数。对于Delivery,只需从 1 个方向(最小或最大)添加更多案例。
  • E 列用于工艺阶段。 G 列是一个整数,使用 networkdays-today 的公式从不同的列中获取日期来计算它在该过程阶段的天数。第 I 列也是一个整数,其计算方式与 G 相同,但使用不同的日期来确定何时启动以及是否启动。
  • 更新代码以匹配您的交付条件。
  • 谢谢@user3605729。希望您已经学习了一些 VBA 并喜欢它。请标记为答案以关闭此问题。
猜你喜欢
  • 1970-01-01
  • 2018-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-08
  • 1970-01-01
  • 1970-01-01
  • 2013-03-18
相关资源
最近更新 更多