Excel VBA“范围类的自动填充方法失败”

时间:2009-10-07 00:05:32

标签: excel vba excel-vba excel-2007 autofill

以下VBA代码(Excel 2007)失败,错误1004,“范围类的自动填充方法失败。”。谁能告诉我如何解决它?

Dim src As Range, out As Range, wks As Worksheet

Set wks = Me
Set out = wks.Range("B:U")
Set src = wks.Range("A6")
src.AutoFill Destination:=out

(注意:我已经谷歌了,等等。它经常出现,但我看到的所有回复都与错误的范围地址有关,而AFAIK不是我的问题。


根据某人的建议,我尝试使用以下内容替换自动填充行:

src.Copy out

这会导致我的Excel会话陷入消耗100%CPU的明显无限循环,然后永远挂起。


好的,显然源必须是自动填充的目标范围的一部分。所以我的代码现在看起来像这样:

Dim src As Range, out As Range, wks As Worksheet

Set wks = Me
Set out = wks.Range("B1")
Set src = wks.Range("A6")
src.Copy out

Set out = wks.Range("B:U")
Set src = wks.Range("B1")
src.AutoFill Destination:=out, Type:=xlFillCopy

最后一行有相同的错误。

4 个答案:

答案 0 :(得分:20)

来自MSDN

  

目的地必须包括   来源范围。

B:U不包含A6,因此出现错误。我相信您可能希望将out设置为A6:U6

仅指定列名意味着您要填充该列中不太可能是所需的behvaiour的每一行


<强>更新

除了以下OP的评论并更新到原始答案之外,这可能会起到作用:

Dim src As Range, out As Range, wks As Worksheet

Set wks = Me
Set out = wks.Range("B1")
Set src = wks.Range("A6")
src.Copy out

Set out = wks.Range("B1:U1")
Set src = wks.Range("B1")
src.AutoFill Destination:=out, Type:=xlFillCopy

Set out = wks.Range("B:U")
Set src = wks.Range("B1:U1")
src.AutoFill Destination:=out, Type:=xlFillCopy

AutoFill一次被约束到单个方向(即水平或垂直)。要从单个单元格填充二维区域,首先必须沿该区域的一条边缘自动填充一条线,然后在该区域内拉伸该线条

对于复制格式和清除内容的特定情况(由于源单元格为空),这样做更好:

Dim src As Range, out As Range, wks As Worksheet

Set wks = Sheet1
Set out = wks.Range("B:U")
Set src = wks.Range("A6")
src.Copy out

答案 1 :(得分:2)

要使AutoFill正常工作,您需要使AutoFill的范围超过来源范围。如果自动填充范围与源范围相同,那么在该范围内没有自动填充,因此您将收到错误

  

1004:Range类的自动填充方法失败。

因此,使自动填充范围超出源范围,错误将消失。

答案 2 :(得分:1)

如果您想自动填充,只需执行类似......

的操作
Private Sub Autofill()

'Select the cell which has the value you want to autofill
Range("Q2").Select

'Do an autofill down to the amount of values returned by the update
Selection.AutoFill Destination:=Range("Q2:Q10")

End Sub

这会自动填充到指定的范围。

这有帮助吗?

答案 3 :(得分:0)

不确定这是否对任何人有帮助,但我需要类似的东西。选择单元作为目标工作;

dim rowcount as integer
Sheets("IssueTemplate").Select ' Whatever your sheet is
rowcount = 0
rowcount = Application.CountA(Range("A:A"))'get end range
Cells(4, 3).Select 'select the start cell
'autofill to rowcount
Selection.AutoFill Destination:=Range("C4:C" & rowcount), Type:=xlFillDefault 

在我的示例中,我必须自动生成从OA100到OA ###?的文件夹名称列表,这样运行正常。