VBA公式如果:WorksheetFunction,Formula或R1C1?

时间:2018-04-23 11:22:07

标签: excel vba excel-vba if-statement

首先发帖,请耐心等待。

我确信以前曾经问过,但我找不到任何解决方案。

我正试图让这些If公式中的任何一个在VBA中运行:

ActiveCell.Value = Application.WorksheetFunction.If(ActiveCell.Offset(0, 2)> 0, "RECEIVES", "PAYS") 

ActiveCell.Formula = "= If(ActiveCell.Offset(0, 2) > 0, ""RECEIVES"", ""PAYS"")"

第一个给出错误代码438,第二个给出#NAME?错误,因为它在公式中显示“Range ...”文本。

使用宏录制器给我这个:

ActiveCell.FormulaR1C1 = "=IF(RC[2]>0,""RECEIVES"",""PAYS"")"

我知道前两个之间的(期望的)差异,但我做错了什么?

谢谢!

4 个答案:

答案 0 :(得分:0)

细胞中的

公式不能与活细胞相关。 你应该这样做:

ActiveCell.Formula = "= If(" & ActiveCell.Offset(0, 2).address & " > 0, ""RECEIVES"", ""PAYS"")"

并且没有类似Application.WorksheetFunction.If的内容,您可以使用iif(condition,value_true,value_false)或使用正常的If-else块

答案 1 :(得分:0)

If中没有Application.WorksheetFunction,这就是438错误的原因。请改用:

ActiveCell.Value = IIf(ActiveCell.Offset(0, 2) > 0, "RECEIVES", "PAYS")

答案 2 :(得分:0)

您不能在公式中使用ActiveCell。试试

ActiveCell.FormulaR1C1 = "= If(RC[2] > 0, ""RECEIVES"", ""PAYS"")"

或范围:

rngSomeRange.FormulaR1C1 = "= If(RC[2] > 0, ""RECEIVES"", ""PAYS"")"
'optionally turn formulae into constants
rngSomeRange.Value = rngSomeRange.Value

答案 3 :(得分:0)

如果要在单元格中输入公式,则使用VBA将一些文本分配给Cells(row, column).Formula。当你想在那里插入某些细胞时,它会变得棘手。一种方法是:

ActiveCell.Formula = "=IF(" & ActiveCell.Offset(0, 2).Address & ">0,""RECEIVES"",""PAYS"")"

你简单地连接 - 这与你的方法有些相似。

但是VBA也提供了更加“干净”的方式(宏记录的那个):

ActiveCell.FormulaR1C1 = "=IF(RC2>0,""RECEIVES"",""PAYS"")"

偏移公式中的语法如下:

R[m]C[n]相当于Offset(m, n)(但后者不能在公式文本中使用),您也可以省略括号[]。 在上面的示例中,RC2表示Offset(0 ,2)

现在,我建议尽可能避免ActiveCell和任何Active。相反,您可以使用Cell(row, column).Formula = ...等。