Всем привет! Имеется некая программа которая выгружает данные в Excel. Имеется также файл назовем его шаблон.xls в который и выгружаются данные. Проблема в том что после открытия файла (это происходит автоматом после выгрузки) файл необходимо сохранить как. Бывает так что кто-то забывает это сделать. И тогда в шаблоне появляются лишние данные. Хочу написать макрос который предлагал бы сохранять как сразу после открытия. Но не очень понимаю последовательность событий. По идее сначала файл открывает та программа, потом в невидимом режиме она будет долго выгружать данные и только затем на экране отобразится файл. Вот тут то надо бы его и сохранить под другим именем. Вобщем пните в нужном направлении.
Всем привет! Имеется некая программа которая выгружает данные в Excel. Имеется также файл назовем его шаблон.xls в который и выгружаются данные. Проблема в том что после открытия файла (это происходит автоматом после выгрузки) файл необходимо сохранить как. Бывает так что кто-то забывает это сделать. И тогда в шаблоне появляются лишние данные. Хочу написать макрос который предлагал бы сохранять как сразу после открытия. Но не очень понимаю последовательность событий. По идее сначала файл открывает та программа, потом в невидимом режиме она будет долго выгружать данные и только затем на экране отобразится файл. Вот тут то надо бы его и сохранить под другим именем. Вобщем пните в нужном направлении.fairylive
Сообщение отредактировал fairylive - Четверг, 16.03.2017, 14:24
Лучше всего в программу дописать "сохранение как" с любым техническим именем (хоть с номерным: запускается цикл, проверяющий: есть ли файл с таким именем и пока есть прибавляется 1 к имени). Если с изменением программы трудности, то можно в модуль листа, в который выгружаются данные на частое событие, допустим Worksheet_Change или Worksheet_SelectionChange вставить проверку на имя файла. И если оно совпадает с именем файла-шаблона, то требовать сохранения как или самой процедурке это сделать.
Лучше всего в программу дописать "сохранение как" с любым техническим именем (хоть с номерным: запускается цикл, проверяющий: есть ли файл с таким именем и пока есть прибавляется 1 к имени). Если с изменением программы трудности, то можно в модуль листа, в который выгружаются данные на частое событие, допустим Worksheet_Change или Worksheet_SelectionChange вставить проверку на имя файла. И если оно совпадает с именем файла-шаблона, то требовать сохранения как или самой процедурке это сделать.Perfect2You
Да с изменением программы проблемы. Нам доступна возможность указать файл шаблона. Нужен макрос на события. Это я все понимаю. Не понятно к чему их прикручивать. На что событие. Файл шаблон это типа просто шапка таблицы. В какой-то момент его открывает сторонняя программа и записывает под шапку данные. По времени это может быть как мгновенно так и до 5 минут. Потом на экране появляется окно Excel. Событие на появление на экране программы Excel? Так ведь может быть что Excel уже открыт.
Да с изменением программы проблемы. Нам доступна возможность указать файл шаблона. Нужен макрос на события. Это я все понимаю. Не понятно к чему их прикручивать. На что событие. Файл шаблон это типа просто шапка таблицы. В какой-то момент его открывает сторонняя программа и записывает под шапку данные. По времени это может быть как мгновенно так и до 5 минут. Потом на экране появляется окно Excel. Событие на появление на экране программы Excel? Так ведь может быть что Excel уже открыт.fairylive
При открытом EXCEL открываете среду VBA (Alt + F11). В верхнем левом окошке под меню находите файл, находите в нем нужный лист. Правой кнопкой мыши на названии листа, выбираете "View Code" В правой части открывается окошко В его верхнем левом углу выпадающий список со значением "(General)". Проваливаетесь, выбираете Worksheet. Вам сразу же будет предложена процедурка Private Sub Worksheet_SelectionChange(ByVal Target As Range) - на событие по изменению активной ячейки. Можете писать код сюда. Если считаете нужным действовать по другому событию, правее Worksheet тоже из выпадающего списка выберите нужное. Оболочка программы-обработчика (название, параметры, End Sub) появятся автоматом. В зависимости от версии EXCEL возможны варианты, но, надеюсь, интуитивно-понятно будет, как добраться. Удачи!
При открытом EXCEL открываете среду VBA (Alt + F11). В верхнем левом окошке под меню находите файл, находите в нем нужный лист. Правой кнопкой мыши на названии листа, выбираете "View Code" В правой части открывается окошко В его верхнем левом углу выпадающий список со значением "(General)". Проваливаетесь, выбираете Worksheet. Вам сразу же будет предложена процедурка Private Sub Worksheet_SelectionChange(ByVal Target As Range) - на событие по изменению активной ячейки. Можете писать код сюда. Если считаете нужным действовать по другому событию, правее Worksheet тоже из выпадающего списка выберите нужное. Оболочка программы-обработчика (название, параметры, End Sub) появятся автоматом. В зависимости от версии EXCEL возможны варианты, но, надеюсь, интуитивно-понятно будет, как добраться. Удачи!Perfect2You
Perfect2You, это я всё знаю. Какое событие должно быть? Как понять в какой момент та программа заканчивает выгрузку? Про то что Excel появляется на экране тоже не совсем верно. Он появляется свернутым мигающим на панеле задач. На мой взгляд больше всего подходит событие Workbook_WindowActivate. Только окно экселя ведь не активэйт появляется. А свёрнутым...
Perfect2You, это я всё знаю. Какое событие должно быть? Как понять в какой момент та программа заканчивает выгрузку? Про то что Excel появляется на экране тоже не совсем верно. Он появляется свернутым мигающим на панеле задач. На мой взгляд больше всего подходит событие Workbook_WindowActivate. Только окно экселя ведь не активэйт появляется. А свёрнутым...fairylive
А может повесить сохранение на момент ЗАКРЫТИЯ файла?
Нет. Так не годится. Хотя конечно довольно просто. Просто вот буквально на днях человек сделал выгрузку и на автомате нажал Ctrl+s после появления на экране файла с выгрузкой. Запорол шаблон. И даже глазом не моргнул. После этого эту же процедуру стали делать другие люди и у них в отчетах лишние данные. Будет день когда кто-то не проверит их. Хочется это заранее всё предупредить. А то как на бочке с порохом работаем.
А может повесить сохранение на момент ЗАКРЫТИЯ файла?
Нет. Так не годится. Хотя конечно довольно просто. Просто вот буквально на днях человек сделал выгрузку и на автомате нажал Ctrl+s после появления на экране файла с выгрузкой. Запорол шаблон. И даже глазом не моргнул. После этого эту же процедуру стали делать другие люди и у них в отчетах лишние данные. Будет день когда кто-то не проверит их. Хочется это заранее всё предупредить. А то как на бочке с порохом работаем.fairylive
человек сделал выгрузку и на автомате нажал Ctrl+s
и сразу же запустилось событие Workbook_BeforeClose, в котором сидит макрос, или не дающий сохранить этот файл с тем же названием, или просто автоматически предлагающий сохранить файл с каким-то другим названием
Ээээ, я не совсем понял, почему "так не годится". Как раз все Ваше дальнейшее пояснение подтверждает, что именно так и годится.
человек сделал выгрузку и на автомате нажал Ctrl+s
и сразу же запустилось событие Workbook_BeforeClose, в котором сидит макрос, или не дающий сохранить этот файл с тем же названием, или просто автоматически предлагающий сохранить файл с каким-то другим названием_Boroda_
Сохраните шаблон в формате .xlt и все проблемы уйдут сами собой
Это гениально! Заработало и то что надо! Меня тут уверяли что народ уже пытался до меня что-то с этим сделать. Выгружалась полная абракадабра вместо нужных данных (какой-то нечитабельный код). Оказалось что программа заточена под старый офис. Сейчас указал файл шаблона с расширением XLT и всё заработало! Спасибо! Иногда забываю что можно сделать всё проще. С макросами та же хрень. Надо было сохранять в XLS их.
Сохраните шаблон в формате .xlt и все проблемы уйдут сами собой
Это гениально! Заработало и то что надо! Меня тут уверяли что народ уже пытался до меня что-то с этим сделать. Выгружалась полная абракадабра вместо нужных данных (какой-то нечитабельный код). Оказалось что программа заточена под старый офис. Сейчас указал файл шаблона с расширением XLT и всё заработало! Спасибо! Иногда забываю что можно сделать всё проще. С макросами та же хрень. Надо было сохранять в XLS их.fairylive
Увы, Workbook_BeforeClose запустилось бы при "Ctrl+w", а вот если подключить еще и Workbook_BeforeSave, то будет гораздо лучше: и то, и другое. Но, может, xlt, предложенное Pelena и проще, и корректнее?
Увы, Workbook_BeforeClose запустилось бы при "Ctrl+w", а вот если подключить еще и Workbook_BeforeSave, то будет гораздо лучше: и то, и другое. Но, может, xlt, предложенное Pelena и проще, и корректнее?Perfect2You
Сообщение отредактировал Perfect2You - Четверг, 16.03.2017, 16:01
Perfect2You, спасибо за идеи! С шаблоном xlt гораздо правильнее. PS В карму всем накидаю спасибов. Просто видимо потому что давно не появлялся на форуме не могу сделать это прямо сейчас. Не дают.
Perfect2You, спасибо за идеи! С шаблоном xlt гораздо правильнее. PS В карму всем накидаю спасибов. Просто видимо потому что давно не появлялся на форуме не могу сделать это прямо сейчас. Не дают.fairylive