Настена Колесникова
Настена Колесникова

Помогите подправить код в VBA

Sub mCopyData()
Dim mRng As Range
Set mRng = Range([a4], [e4]) ' cчитаем, что _
Range([a4], [e4]) - это строка _
Вашего листа-шаблона
If Application.CountA(mRng) = 0 Then
MsgBox "Empty!!!"
Exit Sub
Else
' Ниже, вместо "Sheet2", поставте название листа, _
куда копируете
mRng.Copy Sheets("Sheet2"). _
Cells(Rows.Count, 1) _
.End(xlUp).Offset(1, 0)
End If
End Sub

Этот макрос (найденный тут [ссылка заблокирована по решению администрации проекта]) копирует содержимое строки и вставляет её на следующую страницу, причем если строка уже занята копирует на ниже расположенную. Это практически то что мне нужно, только вот я тут не понимаю в какую строку он начинает копировать и где это поменять, а так же нужно что бы копировались только значения, а не формулы.

Роман Евменов
Роман Евменов

При отладке желательно непонятные детали распечатывать в Debug.Print (окно ниже текста макроса) или в MsgBox.
И не бойтесь менять хотя бы некоторые параметры, тогда скорее поймёте, что к чему.
MsgBox " 1-ый Ок" можно вставлять между некоторыми операторами, чтобы убедиться, что макрос выполнен до этого места без ошибок, а ошибка, если случилась, ниже. Или пользоваться методами отладки.

Ясно, что строка - это диапазон ячеек Range([a4], [e4]).
mRng.Copy Это метод применяемый к объекту.
Остальное дальше - это адрес, куда копируется.
"Sheet2" - это постоянное (до переименования) имя листа на вкладке. Не путать с Sheets(2) это лист второй вкладки книги, считая слева направо, независимо от того, какое имя и когда он создан.
Именно сейчас он второй, и этом всё сказано.
Если лист переместить в ряду или удалить, другой может стать вторым, если если листов больше одного.

mRng.Copy обращается целиком к объекту, ничего в нём не детализируя.
к отдельной ячейке обращается точно также, в методе Copy работает метод Range.

А вот отдельные свойства уже можно извлечь по разному, запоминая в переменную
x=Range(a4).Value
x=Range(a4).Address
x=Range(a4).Formula
и делать с ними что хочешь.
Если лень возиться с мелочами, копируешь всё сразу, логично?

Адрес результата программа выбирает хитро. Вначале она захватывает все строки
начиная с первой до последней, на которой когда-то побывал курсор или вводились данные, хранящейся в счетчике Rows.Count .

Cells(Rows.Count, 1)
затем снизу вверх ищет самую нижнюю из заполненных строк .End (xlUp)
и затем делает отступ вниз на одну строку
.Offset(1, 0)
То есть результат заносится на строку ниже прежнего содержимого листа.
Если же лист был пуст или только первая строка была занята, то результат будет на второй строке.

Похожие вопросы
с++ помогите подправить код
Во что компилирует код VBA Excel?
Код VBA работает с ошибкой, почему?
Помогите, пожалуйста, чего не хватает в коде? VBA
Проблема с кодом в VBA Excel
Помогите подправить код VBA
Помогите с кодом по VBA (VisualBasic) в Excel
Вопрос по CSS и коду. Как найти файл на хостинге в котором нужно подправить код?
Пожалуйста составьте блок-схему и код на VBA
Не работает как надо вложенный массив VBA, код в пояснении