运行宏后保留的公式

时间:2014-06-04 20:18:00

标签: excel vba excel-vba

我想知道如何在专栏J2:J600上保留一个公式。公式为=R2,并且会一直下降到=R600。我以为我可以手动输入公式,但每次运行我的宏时,公式都会消失。有没有办法将公式嵌入到列中?感谢。

修改

Sub FormatCounsel()
    Sheet2.Range("J2").FormulaR1C1 = "=RC[0]"`
    Sheet2.Range("J2").AutoFill Destination:=Range("J2:J600"), Type:=xlFillDefault
End Sub

这是我投入的,我收到了错误。

编辑2

对不起,我刚才意识到我想在单元格=R2中使用公式J2:J600。对不起,如果我引起任何混淆。

2 个答案:

答案 0 :(得分:1)

我在您的代码中看到一个大红旗:您正在使用循环引用!这意味着您要说J2 = J2。换句话说,你的公式指的是一个值,所以它计算找到值,但要找到它需要计算的值,等等......

当您手动输入循环引用时,输入循环引用 总是会出错。但是,当使用VBA输入CR时,我只能通过将Application.Calculation设置为xlCalculationManual,然后计算工作表来引发错误。

你可能刚刚写了一个错字,这就解释了为什么在你的代码中有循环引用,但我想我无论如何都要解释它。 :)

R1C1 公式使用相对引用来引用单元格。因此,当您说RC[0]时,您说要在同一行和同一列中使用该单元格。让我们看一些例子。在我们的示例中,公式将在B2中。

Dim r As Range
Set r = Range("B2")

r = "=RC"         '<~~~ the equivalent to what you used in your code. Refers to B2.
r = "=R[-1]C"     '<~~~ Refers to B1 (current row minus 1).
r = "=RC[1]"      '<~~~ Refers to C2 (current column plus 1).
r = "=R[1]C[1]"   '<~~~ Refers to C3 (current row and current column plus 1).
r = "=R[-1]C[-1]" '<~~~ Refers to A1 (current row and current column minus 1).

现在,只要将公式输入到单元格中,就可以一次完成并且非常容易。请考虑以下示例:

Sub FormatCounsel()

Sheet2.Range("J2:J600") = "=RC[1]" '<~~ Each cell will refer to the cell to the right.

End Sub

答案 1 :(得分:0)

每当你向这些单元格写入其他内容或使用宏清除它们时,您将丢失这些公式。您需要在代码中找到要覆盖或清除它们的位置,并修改该代码。另一种选择是将这些公式写回宏末尾的单元格。您可以通过以下方式完成此任务:

Range("J2").FormulaR1C1 = "=RC[0]"
Range("J2").AutoFill Destination:=Range("J2:J600"), Type:=xlFillDefault