Добрый день, уважаемые форумчане! Вот уже неделю ломаю голову над механизмом, необходима помощь!
Делаю макрос для скачивания отчётов из внутренней системы отчетности компании.
Суть: пользователь выбрал список нужных отчетов, ввел параметры (на листе или в форму) – запустил макрос - заходим на сайт – (Начало цикла) кликаем нужный отчёт – вводим требуемые параметры – жмём Сформировать – ждём (от 10 сек до 30 мин в зависимости от объёма) – получаем выплывающее окно Internet Explorer “открыть/сохранить/отменить”- жмём открыть – видим скачанный архив, внутри файл Excel – открываем – переносим листы в нашу книгу (Конец цикла). И так циклом проходим по всем отчетам.
Отловить прямую ссылку на скачивание я не могу, там выполняется какой-то безумный JavaScript, в какой момент и куда он даёт ссылку выяснить не могу. Отдел ИТ у нас на столько поганый, что от них этой инфы добиться не получилось.
Изучив просторы интернета, я так поняла, что к окну Internet Explorer “открыть/сохранить/отменить” обратиться программно никак нельзя (а может всё-таки можно?). Поэтому я навожусь на последний элемент на странице и далее с помощью SendKeys "{TAB}" переключаюсь до нужной мне кнопки.
К сути проблемы – не могу продумать и реализовать механизм открытия книги excel из архива. Было три варианта:
1) Нажимаю открыть -> Вижу архив -> SendKeys "{DOWN}{ENTER}" (навожусь на файл excel внутри архива, открываю). Если в этом месте кода поставить Breakpoint и потом продолжить выполнение – всё открывается и далее никаких проблем. Но если брейка нет – книга открывается после выполнения макроса, что и логично. Пробовала вводить DoEvents, Wait, Sleep – безрезультатно. Насколько я понимаю данные команды останавливают не только сам макрос, но и excel, поэтому он ничего не может открыть. Есть ли какой-то программный аналог Breakpoint?
2) Нажимаю открыть -> Вижу архив -> SendKeys "{TAB}", SendKeys "{UP}", SendKeys "{TAB}", SendKeys "^{с}" (перехожу на предыдущий уровень, в врехней строке вижу путь, куда IE временно сохранил архив, копирую путь в буфер). Далее разархивирую чудесным макросом от the_Pirst -> открываю книгу через Workbooks.Open. На моём компе работает идеально, на соседнем в этом месте почему-то не срабатывает нажатие TAB (при этом tab в начале кода срабатывает в IE как надо, а в архиве работает UP, ENTER, но TAB ни в какую. Не программно, а реальным нажатием с клавиатуры tab работает)
3) Нажимаю сохранить –> сохранение происходит по пути по умолчанию (если получится запустить это чудо – заставлю всех пользователей сделать один путь). Далее разархивирую чудесным макросом от the_Pirst -> открываю книгу через Workbooks.Open. НО! Если файл с таким именем когда-то сохранялся (очень большая вероятность, т.к. большинство отчетов называются одинаково), то мой будет называться уже не «Отчет», а «Отчет (1)». Соот-но макрос выполнится без ошибок, но откроет старую книгу.
Буду благодарна за любые идеи, файл с кодом (написан вариант №2) прикладываю, он сильно черновой и пока заточен под одну конкретную выгрузку.
P/S/ Извините за сумбур, нет сил уже биться костылями с неизвестностью…