8

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

4 回答 4

22

来自MSDN

目标必须包括源范围。

B:U不包含A6,因此存在错误。我相信您可能希望out设置为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
于 2009-10-07T00:18:05.273 回答
3

要使AutoFill工作,您需要使范围AutoFill超过源范围。如果自动填充范围与源范围相同,则在该范围内没有自动填充,因此您会收到错误

1004: Range 类的 AutoFill 方法失败。

因此,使 AutoFill 范围超过源范围,错误就会消失。

于 2013-09-20T11:05:30.243 回答
0

如果要自动填充,只需执行以下操作...

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

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

这有帮助吗?

于 2009-10-07T10:57:00.153 回答
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###? 的文件​​夹名称列表,这很好用。

于 2013-10-04T10:05:11.850 回答