Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Перенос значений из постоянного одного диапазона книги в другой файл и книгу, Сейчас макрос переносит значение в один файл, но другую книгу.
 
   Здравствуйте, уважаемые форумчане.
Очень прошу Вашей помощи в совершенствовании работы макроса.
Сейчас макрос "perenos" копирует результаты Листа "Отчет" диапазона В8:Е8 и вставляет значения в Лист "Отчет2" в диапазон A : D
Помогите пожалуйста сделать так, чтобы при каждом нажатии кнопки значение переносились на Лист "Отчет2" в диапазон A : D ниже  уже внесенных в этот диапазон данных.
Нужно как-то использовать наверное:
Код
iLastRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1
но я незнаю где это в  "perenos"вставить. Сейчас в макросе не работает.
Заранее огромное спасибо.

Редактировал: Простите пожалуйста. Забыл указать важный момент. Лист "Отчет2" находится в "S:\REPORT\Импорт_2.xls"
Изменено: siryim - 12 Мар 2015 19:50:03
 
Цитата
siryim написал:
Сейчас макрос переносит значение в один файл, но другую книгу.
Это как понять? Книга - это и есть файл.
 
Спасибо,Юрий М.
Да. Я не верно написал:
Верно: Сейчас макрос переносит значение в один файл, но другой лист
 
Чегож
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 - 12 Мар 2015 20:50:14
 
Спасибо,Hugo.
Если я второй раз нажимаю на кнопку - импорт не происходит ниже   уже внесенных в "Отчет2" в диапазон A : D - А3: D 3
Если еще нажимаю на кнопку - импорт не происходит ниже   уже внесенных в "Отчет2" в диапазон A : D - А4: D 4 и так далее.
 
Спасибо огромное,Hugo за макрос.
Работает супер.
Подскажите если можно: Как прописать путь к Листу "Отчет2", который  находится в "S:\REPORT\Импорт_2.xls"
 
Вы прочитайте что я там к ответу добавил.
Поставьте шапку второй строкой, а в А1 забейте например белую точку, сделайте первую строку нулевой высоты.
Изменено: Hugo - 12 Мар 2015 21:02:04
 
Я стараюсь прикрепить к коду так, но ошибка за ошибкой:
Код
Sheets("Отчет").Range("B8:E8").Copy S:\REPORT\Импорт_2.xls Sheets("Отчет2").[A1].End(xlDown)(2)
 
Цитата
P.S. Правда не совсем так... Это работает если в Sheets("Отчет2" заполнены уже 2 строки, если только шапка - нужно код усложнять.
Нет пусть так будет. В Отчет2 заполнены уже 2 строки.
 
А если нужно копировать (не переносить! хотя если и переносить то тоже аналогично) в другой файл, то этот файл нужно кодом открыть, записать туда скопированные ячейки, тот файл сохранить и закрыть. Это уже не одна строка кода.
Если же тот файл может быть уже открыт - другая история, ещё десяток строк кода.
Если же может быть открыт файл  Импорт_2.xls, но не  S:\REPORT\Импорт_2.xls - это уже совсем другая история...
Хотя конечно можно написать код, учитывающий все эти моменты. Но конкретно сейчас я другим занят.

Если оба файла открыты - попробуйте
Код
Sheets("Отчет").Range("B8:E8").Copy workbooks("Импорт_2.xls").Sheets("Отчет2").[A1].End(xlDown)(2)
Изменено: Hugo - 12 Мар 2015 21:13:33
 
Hugo
Спасибо огромное. Работает.
Открытие и закрытие файла Импорт_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

Изменено: Hugo - 12 Мар 2015 21:30:09
 
Спасибо огроменное,Hugo
Но желтым пишет в макросе:
И после желтого в макросе открывается Импорт_2.xls
Код
Sheets("Отчет").Range("B8:E8").Copy .Sheets("Отчет2").[A1].End(xlDown)(2)
Старался сам подстановить так:
Код
heets("Отчет").Range("B8:E8").Copy Workbooks("Импорт_2.xls").Sheets("Отчет2").[A1].End(xlDown)(2)
но безуспешно
Изменено: siryim - 12 Мар 2015 21:40:23
 
Да, упустил/незаметил...
Ведь после открытия книги лист "Отчет" ищется уже в ней..
Код
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
Изменено: Hugo - 12 Мар 2015 22:06:11
 
Я упустил важную вещь - там ведь нужно копировать только значения... Счас..
Исправил код что чуть выше - теперь присваивает только значения, без формул и форматов.
Изменено: Hugo - 12 Мар 2015 22:07:06
 
Супер,супер,супер.
Спасибо от всей душы.
 
Если код поместить в модуль листа, то можно сэкономить букв/переменных/действий:
Код
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
Страницы: 1
Читают тему (гостей: 1)