Excel 如果没有要自动填充的行,则使自动填充宏停止

Excel 如果没有要自动填充的行,则使自动填充宏停止,excel,vba,Excel,Vba,我有一个电子表格,它通过一个autofilter宏从数据库中提取某些项目,并将它们放入不同的部分。我有公式,可以自动填充到每个部分的每一行。我遇到的问题是,如果一个节只有一行,我的宏将进行调试。下面是我插入公式并自动填充它们的代码。最后一行是autofill宏,我需要帮助。有人能给我提供一个覆盖说明,如果没有行可以自动填充,只需进入下一步。我不确定这段代码将如何运行。谢谢 'To insert formulas ActiveCell.Offset(0, 1).Select ActiveCell.

我有一个电子表格,它通过一个autofilter宏从数据库中提取某些项目,并将它们放入不同的部分。我有公式,可以自动填充到每个部分的每一行。我遇到的问题是,如果一个节只有一行,我的宏将进行调试。下面是我插入公式并自动填充它们的代码。最后一行是autofill宏,我需要帮助。有人能给我提供一个覆盖说明,如果没有行可以自动填充,只需进入下一步。我不确定这段代码将如何运行。谢谢

'To insert formulas
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "=IF(RC5<'Data Entry'!R2C2,""*"","""")"
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "=IF(RC18=TRUE,IFERROR(VLOOKUP(RC2,Database!C[-2]:C[9],11,FALSE),""""),0)"
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "=IFERROR(VLOOKUP(RC2,Database!C[-3]:C[8],10,FALSE),"""")"
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "=IFERROR((VLOOKUP(RC9,Pull!C1:C5,4,FALSE))*RC4,"""")"
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "=IFERROR((VLOOKUP(RC9,Pull!C1:C5,5,FALSE))*RC4,"""")"
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "=IFERROR(SUM(RC4,RC6:RC7),"""")"
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "=IFERROR(VLOOKUP(RC2,Database!C[-7]:C[4],6,FALSE),"""")"
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "=IF(RC18=TRUE,IFERROR(VLOOKUP(RC9,'Pull'!C1:C5,2,FALSE),""""),"""")"
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "=IFERROR(RC8*RC10,"""")"
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "=IFERROR(RC8+RC11,"""")"
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "=IFERROR(RC16*R9C13,"""")"
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "=IF(RC18=TRUE,IFERROR(VLOOKUP(RC9,'Pull'!C1:C5,3,FALSE),""""),"""")"
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "=IFERROR(RC16*RC14,"""")"
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "=IFERROR(RC12/(1-R9C13-RC14),"""")"
Range(Cells(Selection.Row, 3), Cells(Selection.Row, 17)).AutoFill Destination:=Range(Cells(Selection.Row, 3), "Q" & Range("B" & Rows.Count).End(xlUp).Row)
插入公式的
'
ActiveCell.Offset(0,1)。选择

ActiveCell.FormulaR1C1=“=IF(RC5我设置了一个LastRow变量,按照您已有的方式计算,并测试它是否大于选择行:

Dim LastRow as Long

LastRow = ActiveSheet.Range("B" & Rows.Count).End(xlUp).Row
...
If LastRow > Selection.Row Then
    Range(Cells(Selection.Row, 3), Cells(Selection.Row, 17)).AutoFill Destination:=Range(Cells(Selection.Row, 3), "Q" & LastRow)
EndIf
顺便说一句,如果您搜索“VBA避免选择语句”,您将获得一些关于为什么这是一个好主意以及如何做到这一点的信息。在这种情况下,我会在代码开头设置一个CellWithFormula变量:

Dim CellWithFormula as Excel.Range
Set CellWithFormula = Activcell
CellWithFormula.FormulaR1C1 = "=IF(RC5<'Data Entry'!R2C2,""*"","""")"
Set CellWithFormula = CellWithFormula.Offset(0, 1)
Dim cell,公式为Excel.Range
设置CellWithFormula=Activcell

CellWithFormula.FormulaR1C1=“=如果(RC5谢谢你,道格。这非常有效。你建议第二部分做什么?那会有什么帮助?@Jamiewarker:第二部分对于编写好的Excel VBA代码至关重要。选择或激活东西会导致各种不必要的问题。我很高兴它能起作用。使用
Select
会减慢速度,还有其他问题。就像我一样说,快速的网络搜索将是有教育意义的。而且最好在一开始就设置一个对象,当你确切知道它是什么和在哪里时(在本例中是CellWithFormula),然后再参考它。