Здравствуйте, уважаемые форумчане. Очень прошу Вашей помощи в совершенствовании работы макроса. Сейчас макрос "perenos" копирует результаты Листа "Отчет" диапазона В8:Е8 и вставляет значения в Лист "Отчет2" в диапазон A : D Помогите пожалуйста сделать так, чтобы при каждом нажатии кнопки значение переносились на Лист "Отчет2" в диапазон A : D ниже уже внесенных в этот диапазон данных. Нужно как-то использовать наверное:
Чегож iLastRow = Cells(Rows.Count, 2).End(xlUp).Row + 1 'не работает Работает! Но без толку - Вы ведь не используете полученное значение.
Достаточно
Код
Sub perenos()
Sheets("Отчет").Range("B8:E8").Copy Sheets("Отчет2").[A1].End(xlDown)(2)
MsgBox "Готово. Импорт значений сделан", vbInformation, "Импорт..."
End Sub
P.S. Правда не совсем так... Это работает если в Sheets("Отчет2") заполнены уже 2 строки, если только шапка - нужно код усложнять.
Спасибо,Hugo. Если я второй раз нажимаю на кнопку - импорт не происходит ниже уже внесенных в "Отчет2" в диапазон A : D - А3: D 3 Если еще нажимаю на кнопку - импорт не происходит ниже уже внесенных в "Отчет2" в диапазон A : D - А4: D 4 и так далее.
Спасибо огромное,Hugo за макрос. Работает супер. Подскажите если можно: Как прописать путь к Листу "Отчет2", который находится в "S:\REPORT\Импорт_2.xls"
А если нужно копировать (не переносить! хотя если и переносить то тоже аналогично) в другой файл, то этот файл нужно кодом открыть, записать туда скопированные ячейки, тот файл сохранить и закрыть. Это уже не одна строка кода. Если же тот файл может быть уже открыт - другая история, ещё десяток строк кода. Если же может быть открыт файл Импорт_2.xls, но не S:\REPORT\Импорт_2.xls - это уже совсем другая история... Хотя конечно можно написать код, учитывающий все эти моменты. Но конкретно сейчас я другим занят.
Да там просто, счас накидаю, без учёта всех тех сложностей.
Код
Sub perenos()
Application.ScreenUpdating = False
With Workbooks.Open("S:\REPORT\Импорт_2.xls")
Sheets("Отчет").Range("B8:E8").Copy .Sheets("Отчет2").[A1].End(xlDown)(2)
.Close True
End With
Application.ScreenUpdating = True
MsgBox "Готово. Импорт значений сделан", vbInformation, "Импорт..."
End Sub
Да, упустил/незаметил... Ведь после открытия книги лист "Отчет" ищется уже в ней..
Код
Sub perenos()
Dim sh As Object
Application.ScreenUpdating = False
Set sh = ActiveSheet
With Workbooks.Open("S:\REPORT\Импорт_2.xls")
.Sheets("Отчет2").[A1].End(xlDown)(2).Resize(, 4).Value = sh.Range("B8:E8").Value
.Close True
End With
Application.ScreenUpdating = True
MsgBox "Готово. Импорт значений сделан", vbInformation, "Импорт..."
End Sub
Я упустил важную вещь - там ведь нужно копировать только значения... Счас.. Исправил код что чуть выше - теперь присваивает только значения, без формул и форматов.
Если код поместить в модуль листа, то можно сэкономить букв/переменных/действий:
Код
Private Sub CommandButton1_Click()
'perenos'это отключаем!
Application.ScreenUpdating = False
With Workbooks.Open("S:\REPORT\Импорт_2.xls")
.Sheets("Отчет2").[A1].End(xlDown)(2).Resize(, 4).Value = Range("B8:E8").Value
.Close True
End With
Application.ScreenUpdating = True
MsgBox "Готово. Импорт значений сделан", vbInformation, "Импорт..."
End Sub