web-dev-qa-db-ja.com

ExcelVBA「範囲クラスの自動入力メソッドが失敗しました」

次の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

(注:私はこれについてグーグルなどを持っています。それはかなり頻繁に出てきます、しかし私が見たすべての応答は不正な形式の範囲アドレスに関係していました、それはAFAIKは私の問題ではありません。


誰かの提案で、オートフィルラインを次のように置き換えてみました。

src.Copy out

これは、Excelセッションを100%のCPUを消費する見かけの無限ループに投げ込み、その後永久にハングするという効果がありました。


OK、どうやらソースは自動入力の宛先範囲の一部である必要があります。したがって、私のコードは次のようになります。

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

最後の行で同じエラー。

8
RBarryYoung

から [〜#〜] msdn [〜#〜]

宛先にはソース範囲が含まれている必要があります。

B:UにはA6が含まれていないため、エラーが発生します。おそらくoutA6: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は、一度に1つの方向(つまり、水平または垂直)に制限されます。単一のセルから2次元領域を塗りつぶすには、最初にその領域の1つのエッジに沿って線を自動入力してから、その線を領域全体に引き伸ばす必要があります。

書式をコピーしてコンテンツをクリアする(ソースセルが空であるため)という特定のケースでは、これが適しています。

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
21
barrowc

AutoFillを機能させるには、AutoFillの範囲をソース範囲より大きくする必要があります。オートフィル範囲がソース範囲と同じである場合、その範囲にはオートフィルするものがないため、エラーが発生します。

1004:RangeクラスのAutoFillメソッドが失敗しました。

したがって、オートフィル範囲をソース範囲よりも大きくすると、エラーがなくなります。

3
MIHIR PATEL

自動入力したい場合は、次のようにします...

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

これにより、指定された範囲まで自動入力されます。

これは役に立ちますか?

1
Dom

これが誰かに役立つかどうかはわかりませんが、私は似たようなものが必要でした。宛先としてセルを選択すると機能します。

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 ###?までのフォルダー名のリストを自動生成する必要がありましたが、これは正常に機能しました。

0
Richard Hilder