2009-10-07 119 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 ###名單?這工作得很好。