Дата: Четверг, 12.07.2012, 08:48 |
Сообщение № 121
Группа: Гости
to Alex_ST Доброе утро! Прежде всего хочу поблагодарить за развёрнутый ответ и за отсутствие среднестатистической лени =) А теперь к делу: 1. Резервировать все изменяемые в ходе работы файлы. 2. Бэкап можно делать подальше от глаз, да хотя бы по умолчанию в "C:\Documents and Settings\Администратор\Application Data\Microsoft\Excel\" и автоматически создавать здесь для каждого редактируемого файла папку с именем "Имя файла". Эх, если бы ещё организовать архивирование, да без батников и планировщика заданий... 3. Все файлы бэкапить с одинаковой периодичностью, скажем 10 минут. 4. Для каждого файла хранить 10 копий для возможности отката на предыдущие шаги. Теперь поясню, для чего нужны все эти пляски с бубном. Имеется компьютер, за которым работают несколько мастеров цеха под одной учётной записью, и расположен он на проходном месте... периодически у них возникают проблемы - то какой-то шутник *или криворукий пользователь?* удалит листы в книге и сохранит изменения, то чудесным образом документы оказываются в корзине... не за горами и очистка корзины. Сам я человек неленивый/любознательный, по специальности занимаюсь программированием систем автоматизации на базе контроллеров Siemens/Fanuc (мельком), времени на освоение всего остального (1С, Excel, Linux-ы, организация ЛВС) банально не хватает. Человек, отвечающий за обслуживание компьютеров, разбираться не хочет и отвечает приблизительно так: "Ха! Такое не возможно. Нужно было грамотно сохранять/бэкапить"="Поздно пить боржоми, когда почки отказали" и т.д. В результате, проблемы не решаются, прогресса никакого. Если нельзя_решить поставленную задачу/сложно_решать средствами Excel, может, натолкнёте на мысль, как всё это можно организовать и с помощью чего? Заранее спасибо!
to Alex_ST Доброе утро! Прежде всего хочу поблагодарить за развёрнутый ответ и за отсутствие среднестатистической лени =) А теперь к делу: 1. Резервировать все изменяемые в ходе работы файлы. 2. Бэкап можно делать подальше от глаз, да хотя бы по умолчанию в "C:\Documents and Settings\Администратор\Application Data\Microsoft\Excel\" и автоматически создавать здесь для каждого редактируемого файла папку с именем "Имя файла". Эх, если бы ещё организовать архивирование, да без батников и планировщика заданий... 3. Все файлы бэкапить с одинаковой периодичностью, скажем 10 минут. 4. Для каждого файла хранить 10 копий для возможности отката на предыдущие шаги. Теперь поясню, для чего нужны все эти пляски с бубном. Имеется компьютер, за которым работают несколько мастеров цеха под одной учётной записью, и расположен он на проходном месте... периодически у них возникают проблемы - то какой-то шутник *или криворукий пользователь?* удалит листы в книге и сохранит изменения, то чудесным образом документы оказываются в корзине... не за горами и очистка корзины. Сам я человек неленивый/любознательный, по специальности занимаюсь программированием систем автоматизации на базе контроллеров Siemens/Fanuc (мельком), времени на освоение всего остального (1С, Excel, Linux-ы, организация ЛВС) банально не хватает. Человек, отвечающий за обслуживание компьютеров, разбираться не хочет и отвечает приблизительно так: "Ха! Такое не возможно. Нужно было грамотно сохранять/бэкапить"="Поздно пить боржоми, когда почки отказали" и т.д. В результате, проблемы не решаются, прогресса никакого. Если нельзя_решить поставленную задачу/сложно_решать средствами Excel, может, натолкнёте на мысль, как всё это можно организовать и с помощью чего? Заранее спасибо!Гость
Дата: Четверг, 12.07.2012, 09:15 |
Сообщение № 122
Группа: Гости
Только что пришла в голову мысль. 1. В Excel-е можно создать простой макрос, выполняющий функции Ctrl+S с периодичностью 9 минут. 2. Создать батник, выполняющий функцию резервирования с периодичностью 10 минут файлов с расширением XLS + создание директорию вида "Имя файла" и складывание в неё 10 вариантов редактируемого файла вида "Имя файла_день_месяц_год_часы-минуты" + выполнение архивирования каждого сохранённого варианта и перезапись по принципу FIFO.
Первый возникший вопрос: "Как сделать, чтобы батник обрабатывал только редактируемые файлы?"
Или я пошёл по неверному пути?
Только что пришла в голову мысль. 1. В Excel-е можно создать простой макрос, выполняющий функции Ctrl+S с периодичностью 9 минут. 2. Создать батник, выполняющий функцию резервирования с периодичностью 10 минут файлов с расширением XLS + создание директорию вида "Имя файла" и складывание в неё 10 вариантов редактируемого файла вида "Имя файла_день_месяц_год_часы-минуты" + выполнение архивирования каждого сохранённого варианта и перезапись по принципу FIFO.
Первый возникший вопрос: "Как сделать, чтобы батник обрабатывал только редактируемые файлы?"
Гость, Во-первых, анонимам на тех форумах, где их присутствие вообще разрешено, обычно отвечают только один раз и то не всегда. Если хотите участвовать в дискуссии, зарегистрируйтесь, пожалуйста. Во-вторых по существу Вашего вопроса: 1. В те файлы, с которыми работают Ваши юзеры (если, конечно, число файлов ограничено десятком-другим), просто добавьте модули из моего последнего крайнего примера. 2. А бэкапать любой Excel-файл, открываемый на компьютере, не реально, т.к. Вы быстро загадите всю свою папку-архив. На вскидку есть два метода определять, какой файл бэкапать: - по его пути (задать программе список папок, изменяемые Excel-файлы из которых нужно бэкапать) - по признаку в теле каждого из файлов (придётся открыть каждый файл и прописать в нём признак "сохранять копию") 3. Бэкапать файл, подлежащий архивированию, надо, наверное, не просто каждые 10 минут и перед сохранением файла (по событию Workbook_BeforeSave ), а только если за эти 10 минут (или перед сохранением) были произведены какие-то изменения (определяется по опросу свойства Workbook.Saved). Тогда просто открытый и оставленный открытым файл не будет постоянно бэкапаться. 4. Ctrl+S просто перезапишет файл на том же месте с тем же именем и кроме того, потеряются возможности отмены действий (UnDo) в процессе работы.
А вообще-то, под Ваши запросы скорее подходит не этот макрос, а Save_Copy_As Он написан мною значительно позже чем рассматриваемый в этом топике, размещается в Personal.xls либо в надстройке, не содержит форм и как раз и предназначен для создания копий файлов в заданном месте. А вызов процедуры Save_Copy_As (в цикле для всех открытых файлов) можно осуществлять каждые 10 минут по таймеру так же, как сделано здесь и по событиям книг Workbook_BeforeSave (нужно добавить в надстройку отлавливание событий других книг). В общем-то не сложно, но времени на это сейчас нет. Тем более, что нужно ещё продумать интерфейс взаимодействия юзера с надстройкой, а уж если её и делать, то надо делать универсальной (и под 2003, и под 2007/2010), а тогда так просто кнопочку для вызова на панель инструментов не вставишь… В общем, подумаю, но не обещаю, что быстро сделаю (работы много, а отпуск через неделю). Да и обсуждать лучше не здесь, а в отдельном топике, который потом вполне можно будет перенести в "Готовые решения".
Гость, Во-первых, анонимам на тех форумах, где их присутствие вообще разрешено, обычно отвечают только один раз и то не всегда. Если хотите участвовать в дискуссии, зарегистрируйтесь, пожалуйста. Во-вторых по существу Вашего вопроса: 1. В те файлы, с которыми работают Ваши юзеры (если, конечно, число файлов ограничено десятком-другим), просто добавьте модули из моего последнего крайнего примера. 2. А бэкапать любой Excel-файл, открываемый на компьютере, не реально, т.к. Вы быстро загадите всю свою папку-архив. На вскидку есть два метода определять, какой файл бэкапать: - по его пути (задать программе список папок, изменяемые Excel-файлы из которых нужно бэкапать) - по признаку в теле каждого из файлов (придётся открыть каждый файл и прописать в нём признак "сохранять копию") 3. Бэкапать файл, подлежащий архивированию, надо, наверное, не просто каждые 10 минут и перед сохранением файла (по событию Workbook_BeforeSave ), а только если за эти 10 минут (или перед сохранением) были произведены какие-то изменения (определяется по опросу свойства Workbook.Saved). Тогда просто открытый и оставленный открытым файл не будет постоянно бэкапаться. 4. Ctrl+S просто перезапишет файл на том же месте с тем же именем и кроме того, потеряются возможности отмены действий (UnDo) в процессе работы.
А вообще-то, под Ваши запросы скорее подходит не этот макрос, а Save_Copy_As Он написан мною значительно позже чем рассматриваемый в этом топике, размещается в Personal.xls либо в надстройке, не содержит форм и как раз и предназначен для создания копий файлов в заданном месте. А вызов процедуры Save_Copy_As (в цикле для всех открытых файлов) можно осуществлять каждые 10 минут по таймеру так же, как сделано здесь и по событиям книг Workbook_BeforeSave (нужно добавить в надстройку отлавливание событий других книг). В общем-то не сложно, но времени на это сейчас нет. Тем более, что нужно ещё продумать интерфейс взаимодействия юзера с надстройкой, а уж если её и делать, то надо делать универсальной (и под 2003, и под 2007/2010), а тогда так просто кнопочку для вызова на панель инструментов не вставишь… В общем, подумаю, но не обещаю, что быстро сделаю (работы много, а отпуск через неделю). Да и обсуждать лучше не здесь, а в отдельном топике, который потом вполне можно будет перенести в "Готовые решения".Alex_ST
По просьбе Alex_ST формулирую свою просьбу здесь. ))
Итак,
1. Надо автосохранять в определенную сетевую папку только 1 определенный открытый файл Excel 2. Файл сохраняется один раз в N минут 3. Сохраненный файл должен быть один 4. Имя сохранённого файла должно быть таким: ОРИГИНАЛ_ [YYYY.MM.DD ЧЧ:ММ'] 5. При открытии autosave-файла пользователем, никаких автосейвов не должно происходить. Т.е. пользователь открывает и читает обычный excel-файл (возможно ли при автосохранении как-то удалять из файла-оригинала процедуру автосохранения?)
Спасибо заранее.
С уважением, Александр
По просьбе Alex_ST формулирую свою просьбу здесь. ))
Итак,
1. Надо автосохранять в определенную сетевую папку только 1 определенный открытый файл Excel 2. Файл сохраняется один раз в N минут 3. Сохраненный файл должен быть один 4. Имя сохранённого файла должно быть таким: ОРИГИНАЛ_ [YYYY.MM.DD ЧЧ:ММ'] 5. При открытии autosave-файла пользователем, никаких автосейвов не должно происходить. Т.е. пользователь открывает и читает обычный excel-файл (возможно ли при автосохранении как-то удалять из файла-оригинала процедуру автосохранения?)
Александр, уточните, автосохранение должно быть: 1. /Даже если ничего в файле не изменилось? 2. Каждые N минут после открытия файла? 3. Каждые N минут по системному времени?
Александр, уточните, автосохранение должно быть: 1. /Даже если ничего в файле не изменилось? 2. Каждые N минут после открытия файла? 3. Каждые N минут по системному времени?Alex_ST
Пробуйте. Переделывать на хранение данных не на листе настроек, а в свойствах файла я не стал. Также не стал стирать старые копии при сохранении новой. Ни к чему это, ИМХО. Да и лень возиться.
Для начала лист настроек не спрятан. Перед "отданием на поюзанье" спрячьте лист (там есть специальная кнопка для этого)
Пробуйте. Переделывать на хранение данных не на листе настроек, а в свойствах файла я не стал. Также не стал стирать старые копии при сохранении новой. Ни к чему это, ИМХО. Да и лень возиться.
Для начала лист настроек не спрятан. Перед "отданием на поюзанье" спрячьте лист (там есть специальная кнопка для этого)Alex_ST
Перед "отданием на поюзанье" спрячьте лист (там есть специальная кнопка для этого)
Так в том-то и вопрос, что нужна автоматизация процесса.
Открыл оператор файл и работает с ним. Файл сам сохраняется каждые N минут в определенную папку с именем data_[2012_10_10_12:05].xls Другие файлы в этой папке не нужны. Только один последний.
Пользователь открывает папку, видит в имени файла дату и время последнего сохранения. Открывает и смотрит файл. И никакого автосохранения (кнопок, макросов) в пользовательском файле нет.
Вот в чём задача.
Спасибо, но немного не то.
Quote
Перед "отданием на поюзанье" спрячьте лист (там есть специальная кнопка для этого)
Так в том-то и вопрос, что нужна автоматизация процесса.
Открыл оператор файл и работает с ним. Файл сам сохраняется каждые N минут в определенную папку с именем data_[2012_10_10_12:05].xls Другие файлы в этой папке не нужны. Только один последний.
Пользователь открывает папку, видит в имени файла дату и время последнего сохранения. Открывает и смотрит файл. И никакого автосохранения (кнопок, макросов) в пользовательском файле нет.
Так в том-то и вопрос, что нужна автоматизация процесса.
Процесс и так полностью автоматизирован. Лист не спрятан только для Вашего удобства при первом запуске. Ведь если бы я его сразу спрятал, то откуда бы Вы узнали о хоткее для настройки?
Quote (Kind_whale)
Другие файлы в этой папке не нужны. Только один последний. Пользователь открывает папку, видит в имени файла дату и время последнего сохранения. Открывает и смотрит файл.
А вот о том, что файл бэкапа кто-то будет открывать и с ним работать, мы не договаривались! Ведь Вы хотите, чтобы файл бэкапа в папке был одним единственным - самым "свежим". Интересно, как Вы себе представляете процедуру, которая при очередном автобэкапе сотрёт уже открытый кем-то файл предыдущего бэкапа? Сделать-то, наверное, это можно, но вот что о Вас скажет пользователь, которого в процессе работы с самым свежим на момент файлом открытия им папки файлом кто-то отключит от него и он получет сообщение типа "Потеряна связь с файлом!"?
Quote (Kind_whale)
Так в том-то и вопрос, что нужна автоматизация процесса.
Процесс и так полностью автоматизирован. Лист не спрятан только для Вашего удобства при первом запуске. Ведь если бы я его сразу спрятал, то откуда бы Вы узнали о хоткее для настройки?
Quote (Kind_whale)
Другие файлы в этой папке не нужны. Только один последний. Пользователь открывает папку, видит в имени файла дату и время последнего сохранения. Открывает и смотрит файл.
А вот о том, что файл бэкапа кто-то будет открывать и с ним работать, мы не договаривались! Ведь Вы хотите, чтобы файл бэкапа в папке был одним единственным - самым "свежим". Интересно, как Вы себе представляете процедуру, которая при очередном автобэкапе сотрёт уже открытый кем-то файл предыдущего бэкапа? Сделать-то, наверное, это можно, но вот что о Вас скажет пользователь, которого в процессе работы с самым свежим на момент файлом открытия им папки файлом кто-то отключит от него и он получет сообщение типа "Потеряна связь с файлом!"?Alex_ST
С уважением, Алексей MS Excel 2003 - the best!!!
Сообщение отредактировал Alex_ST - Среда, 10.10.2012, 20:08
Хорошо, тогда возможно сделать надстройку, которая бы просто сохраняла (имитация Ctrl+S) один определенный файл в ту же папку, где был оригинал? Именно надстройку, а не файл, для того чтобы на машине "оператора" файл автосохранялся, а на машине "того, кто просматривает" никакого автосохранения не было.
Да, задача получается нетривиальная.
Хорошо, тогда возможно сделать надстройку, которая бы просто сохраняла (имитация Ctrl+S) один определенный файл в ту же папку, где был оригинал? Именно надстройку, а не файл, для того чтобы на машине "оператора" файл автосохранялся, а на машине "того, кто просматривает" никакого автосохранения не было.Kind_whale
А автосохранение с заданным интервалом - стандартная функция, задаваемая в настройках Excel'я. Если же Вам нужно сохранение резервной копии файла в той же папке, где он расположен, то на предыдущей странице я выкладывал CreateBackup Ctrl+S сохраняет сам файл и при этом отменяется возможность UnDo. И получается, что юзверг что-то случайно стёр или ошибся, только увидел и захотел отменить или выйти без сохранения чтобы всё восстановилось, а тут раз и всё сохранилось автоматом без возможности отмены. Так что тут, скорее всего, Вам подойдёт именно то, от чего Вы упорно отказываетесь - AutoSaveWbkCopy.
В надстройке сделать труднее, т.к. она при работе как-то должна будет знать, какой из открытых файлов бэкапать, а какой нет. Проще - в самом файле.
А автосохранение с заданным интервалом - стандартная функция, задаваемая в настройках Excel'я. Если же Вам нужно сохранение резервной копии файла в той же папке, где он расположен, то на предыдущей странице я выкладывал CreateBackup Ctrl+S сохраняет сам файл и при этом отменяется возможность UnDo. И получается, что юзверг что-то случайно стёр или ошибся, только увидел и захотел отменить или выйти без сохранения чтобы всё восстановилось, а тут раз и всё сохранилось автоматом без возможности отмены. Так что тут, скорее всего, Вам подойдёт именно то, от чего Вы упорно отказываетесь - AutoSaveWbkCopy.
В надстройке сделать труднее, т.к. она при работе как-то должна будет знать, какой из открытых файлов бэкапать, а какой нет. Проще - в самом файле.Alex_ST
С уважением, Алексей MS Excel 2003 - the best!!!
Сообщение отредактировал Alex_ST - Пятница, 12.10.2012, 23:11
Получается, что реализовать задуманное исключительно средствами Exсel, не получается.
Файл CreateBackup, открытый пользователем будет "шлёпать" также резервные копии, что совсем не нужно.
Поэтому, думаю реализовать задуманное в 2 этапа.
1. "Оператор" открыл файл и работает с ним. 2. Надстройка Excel сохраняет каждые Х минут файл в папку оригинала (имитация Ctrl + S) 3. Спец. программа копирует файл каждые Х минут в сетевую папку, добавляя к имени файла 2012.10.15_14:05_График.xls 4. "Пользователь" может в любое время зайти в сетевую папку, посмотреть на имя файла, понять его актуальность, открыть и посмотреть файл. И файл не будет автосохраняться на его машине, ввиду отсутствия у него этой магической надстройки.
Quote
В надстройке сделать труднее, т.к. она при работе как-то должна будет знать, какой из открытых файлов бэкапать, а какой нет. Проще - в самом файле.
Возможно ли написать надстройку, которая вызывается по горячей комбинации, и в настройках которой можно указать Х-промежуток автосохранения? Надстройка сохраняет все файлы, в имени которых содержится "График" (регистр не учитываем).
Получается, что реализовать задуманное исключительно средствами Exсel, не получается.
Файл CreateBackup, открытый пользователем будет "шлёпать" также резервные копии, что совсем не нужно.
Поэтому, думаю реализовать задуманное в 2 этапа.
1. "Оператор" открыл файл и работает с ним. 2. Надстройка Excel сохраняет каждые Х минут файл в папку оригинала (имитация Ctrl + S) 3. Спец. программа копирует файл каждые Х минут в сетевую папку, добавляя к имени файла 2012.10.15_14:05_График.xls 4. "Пользователь" может в любое время зайти в сетевую папку, посмотреть на имя файла, понять его актуальность, открыть и посмотреть файл. И файл не будет автосохраняться на его машине, ввиду отсутствия у него этой магической надстройки.
Quote
В надстройке сделать труднее, т.к. она при работе как-то должна будет знать, какой из открытых файлов бэкапать, а какой нет. Проще - в самом файле.
Возможно ли написать надстройку, которая вызывается по горячей комбинации, и в настройках которой можно указать Х-промежуток автосохранения? Надстройка сохраняет все файлы, в имени которых содержится "График" (регистр не учитываем).Kind_whale
Со своими организационными моментами - кто "оператор", а кто "пользователь" разбирайтесь, пожалуйста сами.
А по поводу автосохранения только тех файлов, в названии которых есть слово "График", может быть Вы сами подумаете чуть-чуть? Ну неужели так трудно самостоятельно добавить в процедуру SaveAllWbCopy надстройки AutoSaveCopy ПЯТЬ слов для выполнения проверки: [vba]
Code
And Wb.Name Like "*График*"
[/vba] ? Вы же, кажется, не совсем профан в VBA? Не всё же мне за Вас делать?
Со своими организационными моментами - кто "оператор", а кто "пользователь" разбирайтесь, пожалуйста сами.
А по поводу автосохранения только тех файлов, в названии которых есть слово "График", может быть Вы сами подумаете чуть-чуть? Ну неужели так трудно самостоятельно добавить в процедуру SaveAllWbCopy надстройки AutoSaveCopy ПЯТЬ слов для выполнения проверки: [vba]
Code
And Wb.Name Like "*График*"
[/vba] ? Вы же, кажется, не совсем профан в VBA? Не всё же мне за Вас делать?Alex_ST
Kind_whale, поверьте, будет намного лучше и полезнее если Вы сами попробуете "допилить" мой макрос (тем более, что подсказку я Вам дал). Если всё-таки не получится, то обращайтесь, попробую найти время и помочь.
Kind_whale, поверьте, будет намного лучше и полезнее если Вы сами попробуете "допилить" мой макрос (тем более, что подсказку я Вам дал). Если всё-таки не получится, то обращайтесь, попробую найти время и помочь.Alex_ST