好吧!所以!我有一个电子表格,但是我必须保存一份副本,删除数据,然后将其转换为模板类型的情况,然后其他人可以填写。 此电子表格有五个宏-四个宏进行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
有人知道我在做什么错吗?我确定我忽略了一些非常简单的事情!任何帮助将不胜感激。
答案 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
时,这称为不合格参考。在这种情况下可能无关紧要,但这是始终限定范围引用的好习惯。