Всем здравствуйте!
Помогите «докрутить» макрос, методом «тыка» никак не получается.
На лист despatches_RUB с листа5 копирую данные. После того, как убеждаюсь, что цены подтянулись правильно и суммы совпадают с 1с, с помощью макроса (в файле его нет) делаю заливку новых строк по шаблону («встаю на первую незакрашенную ячейку в столбце С (в данном случае это с68) и запускаю макрос). Строки закрашиваются. Очень хочется сделать так, чтобы при этом последовательно запустился еще один макрос, который бы заменил формулы на значения в столбце J (цены), потому что если я забуду вручную это сделать и потом на листе price укажу новые цены, то пересчитаются суммы и в «старых отгрузках», а это конечно неправильно. Т.е. в данном случае должны появиться значения вместо формул в диапазоне J68:J70, а в ячейках J71 и ниже формулы должны остаться. Как это сделать?
Я попыталась соорудить вот такую конструкцию:
Скрытый текст |
---|
Sub Макрос2() ' Макрос2 Макрос ActiveSheet.Range(Selection, Cells(ActiveSheet.UsedRange.Rows.Count, "C")).Offset(0, 7).Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False End Sub |
Но она работает не так, как надо – захватывает бОльший диапазон, чем надо. Прочитала, что в этом случае ячейки с формулами и даже ячейка с заливкой уже считаются «не пустой».
Нашла вот такой урок:
Определение последней строки и столбца, а так же адрес ячейки методом Find
Скрытый текст |
---|
Dim rF As Range Dim lLastRow As Long, lLastCol As Long 'ищем последнюю ячейку на листе, в которой хранится хоть какое-то значение Set rF = ActiveSheet.UsedRange.Find("*", , xlValues, xlWhole, xlPrevious) If Not rF Is Nothing Then lLastRow = rF.Row 'последняя заполненная строка lLastCol = rF.Column 'последний заполненный столбец MsgBox rF.Address 'показываем сообщение с адресом последней ячейки Else 'если ничего не нашлось - значит лист пустой 'и можно назначить в качестве последних первую строку и столбец lLastRow = 1 lLastCol = 1 End If |
Помогите, пожалуйста!