2009-10-07 116 views
7

以下VBA代码(Excel 2007)失败,错误1004“范围级别的自动填充方法失败”。任何人都可以告诉我如何解决它?Excel VBA“范围级别的自动填充方法失败”

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不是我的问题做了答复


在别人的建议,我试图用更换自动填充行:

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 

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

回答

17

MSDN来自:

目的地必须包括 源范围。

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

Specifiying只列名字的意思是要满足每一行中该列这是不太可能的期望behvaiour


更新

而且下面的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 is co向单一方向倾斜(即水平或垂直)。要从单个单元格填充二维区域,首先必须自动填充该区域的一条边线上的一条线,然后在该区域上拉伸该线条。

有关复制格式和清除内容的特定情况(由于源小区是空的),这是更好的:

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 
+0

实际上,我试图重置格式化(对A6中的内容)并清除该列范围中所有行的内容。这个工作正常,当我手动做。 – RBarryYoung 2009-10-07 22:26:38

+1

这应该是被接受的答案。 – dnLL 2014-10-01 20:34:51

+0

真棒!!!!!!!!!!一句话浪费了30分钟后帮了我................. WS.Range(Cells(26,LastCellColumnNumber),Cells(38,LastCellColumnNumber))。AutoFill Destination:= WS .Range(Cells(26,LastCellColumnNumber),Cells(38,nextcolumn)),Type:= xlFillDefault – nick 2017-02-07 08:59:13

1

如果你想自动填充你只是做这样的事情......

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 

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

有帮助吗?

+0

这与我所做的有何不同? – RBarryYoung 2009-10-07 22:24:23

2

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

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

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

+0

谢谢,但这不是在这种情况下的问题。你会从我的代码中注意到源是一个单元,而超出范围是几列。 – RBarryYoung 2013-09-20 13:13:43

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 ###名单?这工作得很好。