Excel VBA "Ошибка метода автозаполнения класса диапазона" - PullRequest
8 голосов
/ 07 октября 2009

Следующий код 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% ЦП, а затем просто зависающий навсегда.


ОК, очевидно, источник должен быть частью диапазона назначения для автозаполнения. Теперь мой код выглядит так:

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 ]

20 голосов
/ 07 октября 2009

С MSDN :

Пункт назначения должен включать диапазон источника.

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

Указание только названия столбца означает, что вы хотите заполнить каждую строку в этом столбце, что вряд ли будет желаемым значением


Обновление

В дополнение к комментарию ОП ниже и обновлению до исходного ответа, это может помочь:

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
2 голосов
/ 20 сентября 2013

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

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

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

1 голос
/ 07 октября 2009

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

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 голосов
/ 04 октября 2013

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

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 ###?, И это работало нормально.

...