Excel VBA运行时错误1004-“范围类的自动填充方法失败”

时间:2018-10-24 20:04:43

标签: excel

好吧!所以!我有一个电子表格,但是我必须保存一份副本,删除数据,然后将其转换为模板类型的情况,然后其他人可以填写。 此电子表格有五个宏-四个宏进行vlookup,第五个宏触发其他四个。我假设这绝对不是最好的方法。

无论如何,它在原始电子表格中的运行情况都非常好,但是奇怪的是,当我保存副本并进行了一些更改(例如,删除数据,重命名了几个不相关的选项卡)时,宏不再起作用-而是我收到这个超级有趣的错误:

  

运行时错误“ 1004”:   Range类的自动填充方法失败

命中调试将一个时髦的小箭头指向以Range(G2)开头的第四行。

Sub fillpronoun()
 Dim LR As Integer
 LR = Range("H" & Rows.Count).End(xlUp).Row
 Range("G2").AutoFill Destination:=Range("G2:G" & LR), Type:=xlFillDefault
End Sub

Sub fillfullname()
 Dim LR As Integer
 LR = Range("H" & Rows.Count).End(xlUp).Row
 Range("I2").AutoFill Destination:=Range("I2:I" & LR), Type:=xlFillDefault
End Sub

Sub filloffice()
 Dim LR As Integer
 LR = Range("H" & Rows.Count).End(xlUp).Row
 Range("J2").AutoFill Destination:=Range("J2:J" & LR), Type:=xlFillDefault
End Sub

Sub CA()
Dim LR As Integer
 LR = Range("H" & Rows.Count).End(xlUp).Row
 Range("M2").AutoFill Destination:=Range("M2:M" & LR), Type:=xlFillDefault
End Sub

Sub runall()
fillpronoun
fillfullname
filloffice
CA
End Sub

有人知道我在做什么错吗?我确定我忽略了一些非常简单的事情!任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

基本上有两种方法可以得到该错误。如果目标范围与源范围相同(在您的情况下,LR为2),或者目标范围不包含源范围(而不是案例)。第二个看起来像这样

Range("A2").AutoFill Range("A5:A10"), xlFillDefault

由于A5:A10不包含A2,因此您会收到该错误。

但是对您来说,这是因为在没有数据的情况下测试时LR为2。您可以接受@BruceWayne的建议,并将LR放在您的调用子中,然后对其进行测试。有点像

Sub DoTheFill(ByVal lLastRow As Long, ByVal sCol As String)
    With ActiveSheet
        .Range(sCol & "2").AutoFill Destination:=.Range(sCol & "2:" & sCol & lLastRow), Type:=xlFillDefault
    End With
End Sub


Sub runall()
    Dim lLastRow As Long

    With ActiveSheet
        lLastRow = .Range("H" & .Rows.Count).End(xlUp).Row
    End With

    If lLastRow > 2 Then
        DoTheFill lLastRow, "G" 'pronoun
        DoTheFill lLastRow, "I" 'Full name
        DoTheFill lLastRow, "J" 'office
        DoTheFill lLastRow, "M" 'CA
    Else
        MsgBox "No data"
    End If

End Sub

几件事情:整数是数据类型,用于向后兼容。 VBA仍然会转换为Long,因此您可以省去麻烦,只需使用Long。

我将所有子子合并为一个。

在不指定图纸的情况下使用Range时,这称为不合格参考。在这种情况下可能无关紧要,但这是始终限定范围引用的好习惯。