Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.01.2016, 17:21   #1
amadeus017
Форумчанин
 
Регистрация: 28.05.2014
Сообщений: 158
По умолчанию Копировать данные из закрытой книги

Доброго времени суток, уважаемые форумчане!
Помогите разобраться с макросом при копировании данных из закрытой книги.
Стоит задача в файл "модель1", допустим на лист "июль", в ячейки "A2:B", скопировать значение из столбцов "G5:Q" из другого файла (закрытой книги с данными этого месяца), причем количество строк, может быть разный. Потом так же, находясь на другом листе (допустим "август"), проделать подобную процедуру за другой период, т.е., скопировать данные в те же ячейки ("A2:B") из закрытой книги другого периода.
В поисках решения данной задачи, наткнулся на интересный код от Hugo, но это перенос таблицы целиком, а не значений из строк. Пробовал просто в коде поставить интересующие меня графы (G5:Q), все равно переносится таблицы.



Код:
Sub Get_Value_From_Book()
        Dim sFile As String, sh As Worksheet, ac As Long

        With Application.FileDialog(msoFileDialogFilePicker)
            .Filters.Clear
            .Filters.Add "Microsoft Excel files", "*.xls"
            .AllowMultiSelect = False
            .InitialFileName = ThisWorkbook.Path
            If .Show = 0 Then Exit Sub
            sFile = .SelectedItems(1)
        End With

        Set sh = ActiveWorkbook.ActiveSheet
        
        Range("H6:AX" & Cells(Rows.Count, 1).End(xlUp).Row).Clear

        With Application
            'отключаем обновление экрана - это убыстрит работу макроса
            .ScreenUpdating = False
            'отключаем события книги
            .EnableEvents = False
            'включаем ручной пересчёт формул - это убыстрит работу макроса
            ac = .Calculation: .Calculation = xlCalculationManual

            With GetObject(sFile).Sheets(1).UsedRange
                .Resize(.Rows.Count - 5).Offset(5).Copy sh.[H6]
                '.Parent.Close False
            End With

            'возвращаем назад всё отключенное/изменённое
            .ScreenUpdating = True
            .EnableEvents = True
            .Calculation = ac
        End With

End Sub
Не новичок на форуме, а код до сих пор не правильно оформляется. Кнопка #
Модератор
Вложения
Тип файла: xlsx Модель1.xlsx (11.3 Кб, 25 просмотров)

Последний раз редактировалось Аватар; 16.01.2016 в 17:30.
amadeus017 вне форума Ответить с цитированием
Старый 16.01.2016, 17:55   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

у Вас есть два варианта:
1.
долго изучать VBA, тогда Вы легко разберете что написал Hugo и как это адаптировать к Вашей задаче

2.
2.1. конкретно и ясно написать, что и как хотите получить в итоге
2.2. красочно и подробно расписать, как организованы данные в исходном файле
при наличии желании Вам помочь первый, кто поймет, что нужно делать - сможет Вам помочь
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 17.01.2016, 07:12   #3
amadeus017
Форумчанин
 
Регистрация: 28.05.2014
Сообщений: 158
По умолчанию

Для меня, больше подходит второй вариант

1 - Есть папка, в которой находится множество файлов с данными за месяц, по каждому менеджеру и каждый месяц, данные пополняются (файлы огромные, количество строк всегда разное, при открытии которых, "офис" зависает).
2 - Необходимо в файл "Модель1", заполнить данными из файлов , которые лежат в одной папке (п.1), не открывая книги, а через меню, которое позволяло бы выбирать нужный нам файл.
3 - Хорошо бы, если бы было еще одно окно, которое позволяло бы выбрать лист, "НА КАКОЙ ЛИСТ ВСТАВИТЬ" (но этот пункт не обязателен)
4 - Импорт данных осуществлялся бы из файлов указанных в п.1, с определенных ячеек "P5:Q", но лишь заполненные строки, а количество строк, у всех разное, на нужный нам лист в ячейки "A2:B".

Прилагаю файлы,
"модель1" - куда нужно перенести данные
"июль" - от куда брать данные не открывая файл
Изображения
Тип файла: jpg папка с данными по менеджеру.jpg (46.5 Кб, 284 просмотров)
Вложения
Тип файла: xlsx Модель1.xlsx (15.5 Кб, 18 просмотров)
Тип файла: xlsx июль.xlsx (28.9 Кб, 20 просмотров)
amadeus017 вне форума Ответить с цитированием
Старый 17.01.2016, 12:01   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

P5:Q????????????????
как знать сколько данных взять? строку, 5, 10, 100?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 17.01.2016, 12:24   #5
amadeus017
Форумчанин
 
Регистрация: 28.05.2014
Сообщений: 158
По умолчанию

В этом вся загвоздка, что количество строк, в разных файлах различное. Можно поставить P5:Q50000, эти данные потом нужны будут для сводной таблицы в файле "модель1" на лист "свод".
amadeus017 вне форума Ответить с цитированием
Старый 17.01.2016, 12:43   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

загвоздка в том, что Вы знаете сколько строк копировать, а я нет

ОГРОМНАЯ ЗАГВОЗДКА в том, что Вы не в состоянии обьяснить задачу - обьяснить сколько же строк копировать????
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 17.01.2016, 12:55   #7
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Цитата:
Сообщение от amadeus017 Посмотреть сообщение
"P5:Q", но лишь заполненные строки,
наверное не больше чем
Код:
Cells(Rows.Count, 1).End(xlUp).Row
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 17.01.2016, 13:21   #8
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

для начала не большой анекдот для иллюстрации ситуации:
папа-дебил отправляет сына-дебила в магазин. папа:
-- сходи в магазин, купи хлеб и молоко. понял?
сынок кивает. папа:
-- вот деньги, купишь хлеб и молоко! всего два предмета, вбей себе в башку - хлеб и молоко! всего! два!! предмета!!!
через некоторое время сын возвращается с магазина и приносит клюшку
папа:
-- ты что купил, дебил??? я тебя просил запомнить и купить всего два предмета!!! а где шайба???, дебил!


так вот, ниже подсказка, которая поможет в постановке задачи

методические рекомендации
"По правильной постановке задачи программисту"


Представьте, что Вы разговариваете с дебилом. Постановка задачи должна соответствовать 2, запомните - двум, простым пунктам:
1. Обьяснять нужно ВСЕ!, что должна делать система для реализации решаемой задачи
2. Обьяснять ВСЕ нужно максимально точно!!!
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете

Последний раз редактировалось IgorGO; 17.01.2016 в 13:26.
IgorGO вне форума Ответить с цитированием
Старый 17.01.2016, 13:38   #9
amadeus017
Форумчанин
 
Регистрация: 28.05.2014
Сообщений: 158
По умолчанию

На самом деле все просто, значение ячеек P5:Q50000, из файла "июль", скопировать в файл "модель1" на лист "июль" в ячейки A2:B49997 не открывая книги.
О переносе данных, нашел на этом форуме, http://www.excelworld.ru/forum/2-571-1 но не могу подстроить под себя. Макрорекордером, так же не получилось сделать перенос данных.
amadeus017 вне форума Ответить с цитированием
Старый 17.01.2016, 13:56   #10
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

1. копируете
Код:
Sub Get_Value_From_Book()
  Dim sFile As String, sh As Worksheet, ac As Long
  With Application.FileDialog(msoFileDialogFilePicker)
    .Filters.Clear: .Filters.Add "Microsoft Excel files", "*.xls*"
    .AllowMultiSelect = False: .InitialFileName = ThisWorkbook.Path
    If .Show = 0 Then Exit Sub Else sFile = .SelectedItems(1)
  End With
  Range("A2:B" & Cells(Rows.Count, 1).End(xlUp).Row).Clear
  With Application
    .ScreenUpdating = False: .EnableEvents = False
    ac = .Calculation: .Calculation = xlCalculationManual
    With GetObject(sFile).Worksheets(1)
      .Cells(5, 16).Resize(.Rows.Count - 4, 2).Copy
      Range("A2").PasteSpecial xlPasteValues
    End With
    .ScreenUpdating = True: .EnableEvents = True: .Calculation = ac
  End With
End Sub
в программный модуль любой из открытых сейчас книг
2. открываете лист (делаете активным), куда должны быть скопированы данные. Внимание! макрос удаляет данные с диапазона А2:В_доПоследнейСтрокиСДанными этого листа
3. любым доступным способом выполняете Get_Value_From_Book

пп.2 и 3 выполняете столько раз в сколько листов нужно скопировать данные из разных книг.

удачи!
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете

Последний раз редактировалось IgorGO; 17.01.2016 в 14:09.
IgorGO вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Данные из закрытой книги. Подправить макрос maragva Microsoft Office Excel 0 30.01.2011 14:51
необходимо копировать данные из 1-й книги в другую serafim09 Microsoft Office Excel 2 15.04.2010 10:43
СУММЕСЛИ из закрытой книги Sha Microsoft Office Excel 1 16.12.2009 17:09
Копирование из закрытой книги Maxx Microsoft Office Excel 11 11.08.2009 10:39
макрос который будет копировать столбец А из закрытой книги Данные, и вставлять в книгу Сток в столбец B Utirka66 Microsoft Office Excel 8 06.07.2009 09:53