我已设置好电子表格,以便在Z
列中输入文字时,会调用AutoFill
宏。
我需要使用公式自动填充AA
和AB
列,直到列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。
答案 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 & ")"