2017-02-21 9 views
-2

Я новичок в VBA, поэтому я делаю только запись макроса и редактирование из него. У меня есть некоторые данные в таблице, которые взяты из формул, и мне нужно «архивировать» их, чтобы при изменении источника данные все еще там. Я записал макрос, чтобы скопировать формулу в строке, чтобы вставить ее в следующую строку, и скопировать и вставить числа в одной строке, чтобы данные не менялись при изменении источника. Но я хочу, чтобы макрос делал то же самое для следующей строки, когда я нажимаю на нее в следующий раз, как я могу изменить свой код, чтобы сделать это?Как скопировать из следующей строки при запуске моего макроса снова

Range("B20:K20").Select 
Selection.Copy 
Range("B21:K21").Select 
ActiveSheet.Paste 
Range("B20:K20").Select 
Application.CutCopyMode = False 
Selection.Copy 
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
    :=False, Transpose:=False 

Вместо копирования из строки 20, я хочу макрос для копирования из строки 21 и вставить в строку 22 в следующий раз, когда я запустить макрос. Пожалуйста помоги! Спасибо!

+1

[Найти последнюю строку] (http://stackoverflow.com/questions/13686801/how-to-determine-the-last-row-used-in-vba-including-blank-spaces-in-between) и использовать это вместо статического диапазона. –

+0

Возможный дубликат [Как определить последний ряд, используемый в VBA, включая пробелы между ними) (http://stackoverflow.com/questions/13686801/how-to-determine-the-last-row-used-in-vba -including-blank-spaces-in-between) –

ответ

1

вы можете использовать:

With Cells(Rows.Count, "B").End(xlUp).Resize(, 10) 
    .Copy .Offset(1) 
    .Value = .Value 
End With 

где это

  • Cells(Rows.Count, "B").End(xlUp)

    ссылки на последняя непустая ячейка в колонке B

  • .Resize(, 10)

    расширяет ссылочную ячейку до 10 столбцов (т. до столбца K)

  • .Copy .Offset(1)

    скопировать ссылочный диапазон в ряду ниже

  • .Value = .Value

    оставляет только значения в диапазоне задания

+0

@ yeocs93, вы прошли через это? – user3598756

+0

Привет! Да, это сработало! Большое вам спасибо за подробное объяснение. Но как я могу также скопировать B20: K20 и вставить числа после вставки формул из B20: K20 в B21: K21? – yeocs93

+0

Добро пожаловать. И, пожалуйста, объясните в некоторых примерах ваш последний вопрос. Так что я могу попробовать и помочь вам больше, BTW. Если мой ответ разрешил ваш _original_ вопрос, тогда вы можете пометить его как принятый, нажав на галочку рядом с ответом, чтобы переключить его с greyed, чтобы заполнить. Спасибо – user3598756

0

Вам просто нужно найти первую пустую строку, чтобы вы могли писать то же самое. Ниже функция может дать вам первую пустую строку, основанную на клетках в столбце B.

Function first_empty() As Long 
Dim i As Long 
i = 0 
For Each cell In ThisWorkbook.Sheets("<sheet_name>").Columns(2).Cells 'iterates over all values in column B for sheet with name <sheet_name> 
i = i + 1 
If IsEmpty(cell) = True Then 
first_empty = i 
Exit For 
End If 
Next cell 
End Function 
Смежные вопросы