Ошибка метода автозаполнения класса диапазона Excel VBA"

следующий код 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

(Примечание: у меня есть Googled и т. д. для этого. Это происходит довольно часто, но все ответы, которые я видел, были связаны с искаженными адресами диапазона, что 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

та же ошибка в последней строке.

4 ответов


С MSDN:

цели должны включать исходный диапазон.

B:U не содержит A6 и таким образом возникает ошибка. Я считаю, что вы, вероятно, хотите out значение A6:U6.

указание только имени столбца означает, что вы хотите заполнить каждую строку в этом столбце, которая вряд ли будет желаемой 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 ограничивается одним направлением (т. е. горизонтальным или вертикальным) сразу. Чтобы заполнить двумерную область из одной ячейки, вам сначала нужно автоматически заполнить линию вдоль одного края этой области, а затем растянуть эту линию через область

для конкретного случая копирования форматирование и очистка содержимого (в силу того, что исходная ячейка пуста), это лучше:

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

сделать AutoFill работа, вам нужно сделать выбор AutoFill больше, чем исходный диапазон. Если диапазон автозаполнения совпадает с диапазоном источника, то в этом диапазоне нет ничего для автозаполнения, и, следовательно, вы получите ошибку

1004: ошибка метода автозаполнения класса диапазона.

поэтому сделайте диапазон автозаполнения больше, чем диапазон источника, и ошибка исчезнет.


Если вы хотите автозаполнение, вы просто делаете что-то вроде...

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

Это будет автозаполнение до указанного диапазона.

помогает ли это?


Не уверен, что это кому-то помогает, Но мне нужно было что-то подобное. Выбор ячеек в качестве назначения работает;

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##? и это сработало отлично.