2017-02-21 25 views
1

Я пытаюсь написать код для автоматического заполнения конечного столбца на листе вправо x раз.Столбец автозаполнения при динамическом запуске

У меня есть код, который подберет последний столбец:

With ActiveSheet 
LC = .Cells(3, .Columns.Count).End(xlToLeft).Column 
End With 
Columns(LC).Select 

, а также код, который АВТОЗАПОЛНЕНИЯ через если указать, какие конкретные столбцы

Selection.AutoFill Destination:=Columns("BE:BQ"), Type:=xlFillDefault 

То, что я борюсь с как заменить столбцы «BE: BQ» на требуемый код, который связан с первоначальной последней колонкой (LC). В идеале я хотел бы, чтобы он автоматически заполнил, чтобы добавить, скажем 10, новые столбцы. У тебя есть какой-нибудь совет?

В идеале, мне бы хотелось, чтобы код просматривал все листы в моей книге - но это, вероятно, немного продвинулось для меня!

спасибо, что заранее.

UPDATE

Спасибо за ваши комментарии предложенных. Я изменил код, как показано ниже. Это, в первую очередь, работало отлично. Однако с тех пор я столкнулся с двумя проблемами.

выпуск 1 - на некоторых листах, когда он заполняет поле даты, которое находится в строке 3, не заполняется. Он просто копирует дату, точно такую ​​же, как в последней строке (то есть 01/06/2017, но отображается как июнь-17). Я бы хотел, чтобы это заполнилось через месяц за раз.

выпуск 2 - в строке 2 есть дата, которая является последним днем ​​прошедшего месяца. В настоящее время это введено вручную, но по мере того как я разработал макрос, мне бы хотелось, чтобы это было изменено на формулу, равную дате в ячейке ниже минус 1 день. Я попытался сделать это, используя следующую формулу, но он пошатнулся!

sht.Cells(2, LC).Formula = "=" & Cells(3, LC) & "-1" 

Любые советы о том, как исправить эти два вопроса, будут наиболее ценными.

+0

Один подход 'клетки (1, LC) .resize (10) .entirecolumn.autofill', но вы действительно хотите, чтобы заполнить всю колонку (и выбора, обычно не рекомендуется или необходимости). – SJR

+0

Этого не должно быть - я мог бы добавить в расчет последней строки и автозаполнение по этому пути. Как бы корректировать VBA для того, чтобы предположить, что LR является рассчитанной последней строкой? – hann783

+0

, пожалуйста, переведите свой ответ на фактический ответ, вместо того, чтобы редактировать свой вопрос с ответом, затем отметьте ответ как принятый после отведенного времени, как передано. Это облегчает для других пользователей поиск ответа. \ –

ответ

0
Dim LC As Integer 
Dim LR As Long 

ActiveSheet.Unprotect 

With ActiveSheet 
    LC = .Cells(3, .Columns.Count).End(xlToLeft).Column 
    LR = .Cells(Rows.Count, LC).End(xlUp).Row 
End With 

Range(Cells(1, LC), Cells(LR, LC)).Select 

Selection.AutoFill Destination:=Range(Cells(1, LC), Cells(LR, LC + 10)),Type:=xlFillDefault 
0

Попробуйте это. Я не уверен в бит A2, поскольку код подсказывает, что автозаполнение начинается в строке 3, но может заменить 3 на 2 в коде, если он также должен быть включен.

Sub x() 

Dim LC As Long, LR As Long, ws As Worksheet 

For Each ws In Worksheets 
    With ws 
     LC = .Cells(3, .Columns.Count).End(xlToLeft).Column 
     LR = .Cells(.Rows.Count, 1).End(xlUp).Row 

     .Range(.Cells(3, LC), .Cells(LR, LC)).AutoFill Destination:=.Range(.Cells(3, LC), .Cells(LR, LC + 10)), Type:=xlFillDefault 
     .Cells(3, LC).AutoFill Destination:=.Cells(3, LC).Resize(, 10), Type:=xlFillMonths 
     .Range("A2").Formula = "=A3-1" 
    End With 
Next ws 

End Sub