2014-02-18 6 views
0

Я пишу небольшой код для автоматизации некоторых моих работ. Я использую Autofill для заполнения диапазона. Все работает нормально, пока диапазон остается прежним. Когда я меняю диапазон, он показывает ошибку 1004: для этой операции объединенные ячейки должны быть одинакового размера.Excel VBA: автозаполнение с ошибкой динамического диапазона

Еще одна вещь, которую нужно добавить, показывает только тогда, когда диапазон становится больше.

Вот часть моего кода, когда изменения диапазона линия ниже 'autofill first column становится желтой:

Dim WSL As Worksheet, WSB As Worksheet 
Dim first_col As Long, second_col As Long 
Dim first_r As Byte, first_c As Byte 
Dim second_r As Byte, second_c As Byte 
Dim LastCellRowNumber As Long 
Dim LastCell As Range, ActiveWS As String 

Application.ScreenUpdating = False 

Set WSB = Worksheets("Barcodes") 'your worksheet name 
Set WSL = Worksheets("List") 'your worksheet name 
With WSL 
    Set LastCell = .Cells(.Rows.Count, "A").End(xlUp) 
    LastCellRowNumber = LastCell.Row 
End With 

ActiveWS = ActiveSheet.Name 

first_col = Round(LastCellRowNumber/2) + 1 
second_col = LastCellRowNumber - first_col 

first_r = 5 'position of "first column" row 
first_c = 7 'position of "first column" column 
second_r = 5 'position of "second column" row 
second_c = 11 'position of "first column" column 

j = 7 
k = 8 
l = 7 
m = 8 

'activate Barcodes sheet 
WSB.Activate 

'autofill first column 
WSB.Range(Cells(first_r, first_c), Cells(first_r + 1, first_c)).AutoFill _ 
Destination:=Range(Cells(first_r, first_c), Cells((first_r + 1) + (first_col * 2) - 4, _ 
first_c)), Type:=xlFillDefault 'filling column G 

WSB.Range(Cells(first_r, first_c + 1), Cells(first_r + 1, first_c + 2)).AutoFill _ 
Destination:=Range(Cells(first_r, first_c + 1), Cells(first_r + 1 + (first_col * 2) - 4, _ 
first_c + 2)), Type:=xlFillFormats 'filling with columns H:I 

'autofill second column 
WSB.Range(Cells(second_r, second_c), Cells(second_r + 1, second_c)).AutoFill _ 
Destination:=Range(Cells(second_r, second_c), Cells(second_r + 1 + (second_col * 2), _ 
second_c)), Type:=xlFillDefault 'filling column K 

WSB.Range(Cells(second_r, second_c + 1), Cells(second_r + 1, second_c + 2)).AutoFill _ 
Destination:=Range(Cells(second_r, second_c + 1), Cells(second_r + 1 + (second_col * 2), _ 
second_c + 2)), Type:=xlFillFormats 'filling with columns L:M 
+0

проверить таблицу 'WSB' для megred клеток –

+0

@simoco WSB содержит объединенные ячейки - это шаблоны. Autofill выбирает эти объединенные ячейки и заданный диапазон автозаполнения. – lowak

+0

, как говорится в сообщении об ошибке, вы объединили ячейки с различной «формой». говорят в первой строке 'C1: D1', но во втором' D2: E2' –

ответ

0

Последующим от комментариев:

Как говорит ваше сообщение об ошибке, вы объединенные ячейки с различным «форма». Скажем в первом ряду C1:D1 сливается, но во втором D2:E2. Сначала я предлагаю вам сделать range("C200:D200").UnMerge, чтобы освободить все ячейки в целевом диапазоне (кроме первой строки).

Что-то, как это должно работать (только под ваши диапазоны, чтобы исправить один)

With wbs 
    'unmerge all cells 
    .Range(.Cells(first_r + 1, first_c), .Cells((first_r + 1) + (first_col * 2) - 4, _ 
     first_c)).UnMerge 

    'autofill first column 
    .Range(.Cells(first_r, first_c), .Cells(first_r + 1, first_c)).AutoFill _ 
    Destination:=.Range(.Cells(first_r, first_c), .Cells((first_r + 1) + (first_col * 2) - 4, _ 
     first_c)), Type:=xlFillDefault 'filling column G 
End With 

Btw, еще один совет для вас: how to avoid using select/active statements

+1

Да, я написал что-то подобное. Спасибо, что «избегайте использования select/active». Я читаю довольно часто, поэтому стараюсь избегать этого. Мой комментарий был неудачным для использования слова «выбрать» :) Спасибо за помощь еще раз! – lowak

Смежные вопросы