【问题标题】:Excel VBA "Autofill Method of Range Class Failed"Excel VBA“范围类的自动填充方法失败”
【发布时间】:2010-12-04 11:14:48
【问题描述】:

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

(注意:我已经用谷歌搜索过,等等。它经常出现,但我看到的所有响应都与格式错误的范围地址有关,这不是我的问题。


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

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

最后一行出现同样的错误。

【问题讨论】:

    标签: vba excel excel-2007 autofill


    【解决方案1】:

    来自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
    

    【讨论】:

    • 实际上,我 am 试图重置格式(到 A6 中的内容)并清除该列范围内所有行的内容。当我手动执行此操作时效果很好。
    【解决方案2】:

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

    1004: Range 类的 AutoFill 方法失败。

    因此,使自动填充范围大于源范围,错误就会消失。

    【讨论】:

    • 谢谢,但在这种情况下这不是问题。您会从我的代码中注意到,源是一个单元格,而超出范围是几列。
    【解决方案3】:

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

    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
    

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

    这有帮助吗?

    【讨论】:

    • 这与我所做的有什么不同?
    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-10
      • 1970-01-01
      • 2023-02-02
      • 1970-01-01
      相关资源
      最近更新 更多