2015-11-18 4 views
4

Я хочу создать столбец в P под названием Age of Ticket. Он вычисляет две даты, а затем автозаполнение. Этот макрос будет использоваться для отчетов, которые изменяют количество строк. Когда я использую это, он в основном выполняет вычисления на P2, тогда он вычисляет на P1 (где метка) и не выполняет автозаполнение.Macro to Autofill

Dim LastRow As Long 

LastRow = Range("P65000").End(xlUp).Row 

Range("P1").Select 
ActiveCell.FormulaR1C1 = "Age of Ticket" 
Range("P2").Select 
ActiveCell.FormulaR1C1 = "=RC[-5]-RC[-8]" 
Range("P2").Select 
Selection.AutoFill Destination:=Range("P2:P" & LastRow) 
Range("P2:P3000").Select 
ActiveWindow.SmallScroll Down:=210 

[Результаты]

enter image description here

ответ

5

Вопрос заключается в том, что колонка, когда он добавляется пуст. Таким образом, ваш код говорит, что лучше перейти на P65000 и имитировать удар ctrl - upArrow. Это обнаружит первую ячейку со значением, но поскольку в верхней ячейке P1 она не остановится, таким образом LastRow = 1. Таким образом, область заполнения будет P2: P1. Используйте столбец, в котором есть данные. Я использовал столбец K, потому что он находится в вашей формуле.

Это прекрасный пример использования макроса записи и попытки очистки. При очистке кода одним фокусом должно быть избавление от .Select. См. here для отличной компиляции методов для диапазонов опорных значений без .Select

Также при использовании .FormulaR1C1 весь диапазон может быть установлен сразу и не нуждается в заполнении.

Изменения выше код:

Dim LastRow As Long 

LastRow = Range("K65000").End(xlUp).Row 

Range("P1").value = "Age of Ticket" 
Range("P2:P" & LastRow).FormulaR1C1 = "=RC[-5]-RC[-8]" 

Кроме того, если вы хотите использовать автозаполнение, нет необходимости использовать формулу R1C1.

Range("P2").Formula = "=K2-H2" 
Range("P2").AutoFill Destination:=Range("P2:P" & LastRow) 

Это автоматически изменит относительные ссылки, чтобы сохранить правильные строки.

+0

@PriBee Это работало для вас? –

+0

Ты потрясающий !!! Спасибо Скотту, что сделал трюк :-) –