Range Class上的自动填充错误

时间:2017-12-03 19:00:40

标签: vba excel-vba excel

我尝试添加两列公式并自动填充到最后一行,但我得到了

  

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

运行代码时。它在以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变量,我无法运行代码。

相反,它返回运行时错误

  

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

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

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

虽然目前还不清楚你实际上从哪里开始(例如选择了什么单元格),但我认为可以假设你在运行子程序之前知道自己在做什么。无论如何,最好是.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