Ошибка метода автозаполнения класса диапазона 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##? и это сработало отлично.