1

我创建了一个宏来显示以下内容:

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 

但是,这似乎不起作用。
让我再解释一下这应该如何工作:

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

此外,我还必须使用此公式为所有行填充电子表格。

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

我在这里想念什么?

4

2 回答 2

1

当您使用Range.Formula = formulaAsString,并且该范围引用多个单元格时,您指定(仅)该范围中的第一个单元格所需的确切公式字符串,同时适当地使用相对与绝对单元格引用,因为分配给多个(后续)单元格将就像您将范围中的第一个单元格粘贴到其他单元格一样,就像您在没有 VBA 的情况下完成了复制和粘贴一样——您使用绝对寻址 A1 vs. A$1 vs. $A$1 vs. $A1 等...根据需要实现对后续单元格的公式的正确更改。

例如,

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

将有相同的结果

Range ( "A1" ).Formula = "=A2+$A2"
Range ( "C1" ).Formula = "=C2+$A2"
Range ( "E1" ).Formula = "=E2+$A2"
于 2012-12-14T22:07:15.443 回答
1

你混在一起.Formula.FormulaR1C1!您的字符串是 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 中不是必需的,因为公式无论如何都保持不变......)

于 2013-03-04T20:31:10.053 回答