范围类上的自动填充错误
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:范围类的自动填充方法失败 vba excel 2010