2012-11-15 59 views
1

我创建了一个宏显示如下:我已经创建了一个使用if函数的宏,但它似乎不工作。我错了什么?

If (I3<>0,I3*G3,H3*G3)这重演细胞N3, R3, V3, Z3

Option Explicit 
Sub Eg() 
    Range("J3, N3,R3, V3,Z3,AD3,AH3,AL3,AP3,AT3,Ax3,BB3,XF3,BJ3").Formula = "=IF(RC[-1]<>0,RC[-1]*RC[-3],RC[-2]*RC[-3])" 
End Sub 

然而,这似乎并没有工作。
让我再解释一下这应该如何工作:

此报告需要从应用程序下载。
需要将宏附加到此报表中,以便在下载报表时宏将自动在适当的列中运行此公式。

另外,我将不得不使用此公式填充所有行的电子表格。

公式所在的列不是空白的,但是一旦宏运行,就需要在报告中自动满足这个要求。

我在这里错过了什么?

+0

...我不确定我是否理解你的问题...公式本身(你提供的宏)工作得很好。 ..你能解释更多吗?你在寻找什么帮助...... –

+0

所以你在问什么,你真的有什么问题? –

+2

不适用于Excel 2003或更早版本,因为范围XF3不存在(Excel 2003中最高可用列为IV)。怀疑这是问题 – barrowc

回答

1

当您使用Range.Formula = formulaAsString,并且范围引用多个单元格时,可以根据(仅)该范围内的第一个单元格的要求指定确切的公式字符串,同时适当地使用相对与绝对单元格引用,因为分配给多个(成功)单元格会发生,就好像您将该范围内的第一个单元格粘贴到其他单元格中一样,就好像您已经完成了复制&粘贴而不使用VBA - 您使用绝对地址A1与A $ 1对比$ A $ 1与$ A1等等...一样,以实现后续单元格公式的正确变更。

例如,

Range ("A1, C1, E1").Formula = "=A2+$A2" 

都会有相同的结果

Range ("A1").Formula = "=A2+$A2" 
Range ("C1").Formula = "=C2+$A2" 
Range ("E1").Formula = "=E2+$A2" 
1

您与.FormulaR1C1混合起来.Formula!您的字符串是R1C1样式,但将其分配给A1样式公式。

因此,简单地说,将其更改为:

Range("J3, N3,R3, V3,Z3,AD3,AH3,AL3,AP3,AT3,Ax3,BB3,XF3,BJ3").FormulaR1C1 = _ 
    "=IF(RC[-1]<>0,RC[-1]*RC[-3],RC[-2]*RC[-3])" 

Range("J3, N3,R3, V3,Z3,AD3,AH3,AL3,AP3,AT3,Ax3,BB3,XF3,BJ3").Formula = _ 
    "=IF(I3<>0,I3*G3,H3*G3)" 

正如埃里克在他的回答中指出,还有后来将工作和调整配方在同一每个单元(R1C1中没有必要,因为公式保持不变...)

相关问题