VBA:Excel评估不正确

时间:2016-03-04 19:08:27

标签: excel vba excel-vba

为什么excel正在评估像4>这样的东西,我一直在撞墙。 0是假的......

在vba中,我正在应用以下R1C1论坛:

=IF(AND(RC[-5]>R1C15,RC[-4]>2*R1C15,RC[-3]>3*R1C15),""CORE"",""-"")

当宏运行时,转为:

=IF(AND(I2>$O$1,J2>2*$O$1,K2>3*$O$1),"CORE","-")

但是,如果我们看一下第2行的截图 I2,J2,K2都设置为值4,大于O1值0,但excel将其评估为false。

documentation of Jboss modules with regards to class loading

为什么呢?这两个字段都被格式化为数字?

完整的vba片段:

Public Sub FormatCore()
    Rows("1:1").Select
    With ActiveWindow
    Range("B2").Select
    ActiveWindow.FreezePanes = False
    ActiveWindow.FreezePanes = True
    End With
    Range("N2").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = "=IF(AND(RC[-5]>R1C15,RC[-4]>2*R1C15,RC[-3]>3*R1C15),""CORE"",""-"")"
    Range("N3").Select
    Range("N2").Select
    Dim total_rows As Double
    total_rows = Worksheets("Report").Cells(Worksheets("Report").Rows.Count, "A").End(xlUp).Row
    Selection.AutoFill Destination:=Range("N2: N" & total_rows)
End Sub

1 个答案:

答案 0 :(得分:2)

您可以尝试使用更干净的VBA代码段:它可以正常工作:

Public Sub FormatCore()
    Dim total_rows As Double
    total_rows = Worksheets("Report").Cells(Worksheets("Report").Rows.Count, "A").End(xlUp).Row
    Range("N2").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = "=IF(AND(RC[-5]>R1C15,RC[-4]>2*R1C15,RC[-3]>3*R1C15),""CORE"",""-"")"
    Selection.AutoFill Destination:=Range("N2: N" & total_rows)
End Sub

希望这会有所帮助。

注意 关于成员@dashnick制作并删除的其他解决方案和评论:表达式J2>(2*$O$1)相当于J2>2*$O$1,因为乘法优先,然后是逻辑运算,因此括号(由该成员建议)只是可选的;没有它们,解决方案就可以工作。