使用VBA将公式插入到具有可变行号的单元格中

时间:2015-05-24 00:46:16

标签: excel vba excel-vba excel-formula

我已设置好电子表格,以便在Z列中输入文字时,会调用AutoFill宏。

我需要使用公式自动填充AAAB列,直到列Z中的最后一行文本为止。我正在使用.AutoFill

'Range("AA3:AB3").AutoFill Destination:=Range("AA3:AB" & lastRow), Type:=xlFillValues

AA3起始公式为:=IF(AC3="",IF(Y3="","",AB2),AC3)

AB3起始公式为:=IF(AD3="",IF(AA3="","",WORKDAY(AA3,(Y3/8))),AD3)

这项工作正常,但有时会手动输入单元格值,这会删除原始公式,然后将其他单元格的自动填充搞乱。所以我拿走了自动填充,并使用ActiveCell.Row添加了一个带有可变行号的集合公式。

这就是我现在所拥有的:

Sub AutoFill()

Application.EnableEvents = False

lastRow = Range("Z900").End(xlUp).Row


Range("AA" & (ActiveCell.Row)).Formula = "=IF(AC" & ActiveCell.Row & "="", IF(Y" & ActiveCell.Row & "="","",AB" & ActiveCell.Row - 1 & "),AC" & ActiveCell.Row & ")"
Range("AB" & (ActiveCell.Row)).Formula = "=IF(AD" & ActiveCell.Row & "="",IF(AA" & ActiveCell.Row & "="","",WORKDAY(AA" & ActiveCell.Row & ", (Y" & ActiveCell.Row & "/8))),AD" & ActiveCell.Row & ")"

Application.EnableEvents = True

End Sub

现在我收到运行时错误,并突出显示第一个"Range("AA"..."。我做错了什么?

我正在使用Excel 2010。

2 个答案:

答案 0 :(得分:2)

您可以将其简化为

Range("AA3:AA" & lastRow).Formula = "=IF(AC3="""",IF(Y3="""","""",AB2),AC3)"
Range("AB3:AB" & lastRow).Formula = "=IF(AD3="""",IF(AA3="""","""",WORKDAY(AA3,(Y3/8))),AD3)"

没有$的行号将自动递增。

答案 1 :(得分:1)

所有空白""的引文都更改为""""。报价单中的报价单。这修复了运行时错误以允许公式起作用。

Range("AA" & (ActiveCell.Row)).Formula = "=IF(AC" & ActiveCell.Row & "="""", IF(Y" & ActiveCell.Row & "="""","""",AB" & ActiveCell.Row - 1 & "),AC" & ActiveCell.Row & ")"
Range("AB" & (ActiveCell.Row)).Formula = "=IF(AD" & ActiveCell.Row & "="""",IF(AA" & ActiveCell.Row & "="""","""",WORKDAY(AA" & ActiveCell.Row & ", (Y" & ActiveCell.Row & "/8))),AD" & ActiveCell.Row & ")"