首先发帖,请耐心等待。
我确信以前曾经问过,但我找不到任何解决方案。
我正试图让这些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"")"
我知道前两个之间的(期望的)差异,但我做错了什么?
谢谢!
答案 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 = ...
等。