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

以下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 

(注意:我已经使用了Google等等,但是它经常出现,但是我所看到的所有回复都与格式不正确的范围地址有关,AFAIK不是我的问题。


在某人的build议下,我尝试用以下代码replace自动填充行:

 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 

最后一行同样的错误。

来自MSDN :

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

B:U不包含A6 ,因此出现错误。 我相信你可能想要被设置为A6:U6

只指定列名意味着你想填补该列中的每一行,这不太可能是所希望的


更新

继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 

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

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

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

如果你想自动填充你只是做一些像…

 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 

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

有帮助吗?

不知道这是否有助于任何人,但我需要类似的东西。 select单元作为目标作品;

 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 ###?的文件夹名称的列表,这工作得很好。