范围类上的自动填充错误

Posted

技术标签:

【中文标题】范围类上的自动填充错误【英文标题】:Autofill error on Range Class 【发布时间】:2017-12-03 19:00:39 【问题描述】:

我正在尝试使用公式添加 2 列并自动填充到最后一行,但我得到了一个

范围类的自动填充方法失败

运行代码时。它在以Activecell.Autofill 开头的行处中断

Sub addColumnsandChange()
Dim LastRow As Integer

'Finds the value of the last row
LastRow = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row

Selection.EntireColumn.Insert
Selection.EntireColumn.Insert
ActiveCell.FormulaR1C1 = "YoY% Change"
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.FormulaR1C1 = "3 Year CAGR"
ActiveCell.Offset(1, -1).Range("A1").Select
ActiveCell.FormulaR1C1 = "=IFERROR((RC[-1]-RC[2])/RC[2],"""")"
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.FormulaR1C1 = "=IFERROR((RC[-2]/RC[2])^(1/3)-1,"""")"
ActiveCell.Offset(0, -1).Range("A1:B1").Select
ActiveCell.AutoFill Range("A1:B" & LastRow), Type:=xlFillDefault
Range("A1:B" & LastRow).Select

End Sub

自从合并 LastRow 变量后,我无法运行代码。

相反,它返回一个运行时错误

范围类的自动填充方法失败

调试时。我应该如何自动填充和结束代码?

【问题讨论】:

启动宏时选择了哪个单元格? (如果你使用Selection 并且没有在问题中指定选择了什么,那么人们很难调试。)另外,LastRow 崩溃时的值是多少? (即哪一行包含活动工作表 A 列中最后使用的单元格?) 我的猜测(这是一个非常疯狂的猜测)是你正在尝试做ActiveCell.Range("A1:B1").AutoFill ActiveCell.Resize(LastRow - 1, 2), Type:=xlFillDefault,但这是一个非常糟糕这样做的方式,如果您告诉我们您要实现的目标(也许将您的工作表的屏幕截图添加到问题中),我们也许可以帮助您解决问题,使其更加健壮。 我认为我说您一次只能在一种意义上自动填充,即列然后行,反之亦然。尝试两次:一次“A1:A?”然后是列。 【参考方案1】:

虽然不清楚您实际从哪里开始(例如,单元格选择是什么),但我想可以假设您在运行子过程之前知道自己在做什么。无论如何,最好是 .FillDown 或一次编写所有公式。

使用 .FillDown:

Sub addColumnsandChange()
    Dim lastRow As Long

    'Finds the value of the last row
    lastRow = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row

    With Selection.Cells(1)
        .Resize(lastRow, 2).EntireColumn.Insert
        .Offset(0, -2).Resize(1, 2) = Array("YoY% Change", "3 Year CAGR")
        .Offset(1, -2).FormulaR1C1 = "=IFERROR((RC[-1]-RC[2])/RC[2], TEXT(,))"
        .Offset(1, -1).FormulaR1C1 = "=IFERROR((RC[-2]/RC[2])^(1/3)-1, TEXT(,))"
        .Offset(1, -2).Resize(lastRow - 1, 2).FillDown
        .Offset(0, -2).Resize(lastRow, 2).Select
    End With

End Sub

一次编写所有公式:

Sub addColumnsandChange()
    Dim lastRow As Long

    'Finds the value of the last row
    lastRow = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row

    With Selection.Cells(1)
        .Resize(lastRow, 2).EntireColumn.Insert
        .Offset(0, -2).Resize(1, 2) = Array("YoY% Change", "3 Year CAGR")
        .Offset(1, -2).Resize(lastRow - 1, 2).FormulaR1C1 = "=IFERROR((RC[-1]-RC[2])/RC[2], TEXT(,))"
        .Offset(1, -1).Resize(lastRow - 1, 2).FormulaR1C1 = "=IFERROR((RC[-2]/RC[2])^(1/3)-1, TEXT(,))"
        .Offset(0, -2).Resize(lastRow, 2).Select
    End With

End Sub

【讨论】:

【参考方案2】:

您正在尝试从第一行开始自动填充。

但是,您尝试复制的公式位于第二行。您的第一行包含标题文本。

请注意:您不必在更改其值之前选择一个单元格。如果您离开我们的那些选择,您的代码将执行更多。 (而且代码会变得更容易阅读和理解)

【讨论】:

以上是关于范围类上的自动填充错误的主要内容,如果未能解决你的问题,请参考以下文章

自动填充运行时错误 1004 - 自动填充动态范围

Excel VBA:自动填充动态范围错误

VBA Excel - 自动填充方法超出范围类错误

错误 1004:范围类的自动填充方法失败 vba excel 2010

自动填充活动工作表后,另一张工作表上的自动填充不起作用(无错误)

通过将活动单元格的范围提供给列的最后一行来显示自动填充命令范围中的错误