Страницы: 1
RSS
обновление данных в книге с общим доступом
 
Добрый день!  
Надеюсь на помощь  
Есть книга с общим доступом, которую используют несколько пользователей. Перед добавлении новой записи приходится сохранять книгу (тогда отображаются сохраненные изменения проделанные другими пользователями) чтобы не возник конфликт записи данных в таблицу. В Excel есть встроенная функция отображения изменений, но минимальный интервал обновления 5 мин. Для внесения данных используется пользовательская форма. Т.к. файл около 40 МБ сохранение общей книги происходит долго, а сохранять нужно перед внесением каждой записи, поэтому нужно отобразить только изменения на листе без сохранения,а уж после внесения данных сохранить.  
Вопрос: как обновить сохраненные данные другими пользователями автоматически (самому) при помощи VBA?  
 
Заранее спасибо!
 
Автоматически, значит при выполнении какого-либо действия. В VBA есть замечательная возможность обрабатавать код при выполнении какого либо действия пользователя - события. Если Вы откроете редактор VBA и зайдете на лист - выберите в левом выпадающем списке WorkSheet и просмотрите выпадающий список справа - это встроенные процедуры обработки событий на листе. Так вот Ваш макрос автоматического сохранения должен быть в одной из этих процедур к примеру: Activate - при выборе этого листа, Deactivate - смене этого листа на другой, и т.д. Для всех объектов (книга, элемент управления) есть такие процедуры. Поэтому Вы сначала определитесь по какому событию надо сохраняться, а потом вместе подумаем.
 
Автоматическое обновление долно стать альтернативой сохранению.  
 
Исходные данные: имеется общая база в Excel (книга) и пользовательская форма (VBA), где на листе БАЗА менеджеры вносят заказы в эту книгу в режиме общего доступа при помощи пользовательской формы.    
Действия формы:  
1. При нажатии кнопки "Принять заказ" выскакивает форма (форма написана, вопрос только в обновлении данных).  
2. Определяется следующий по порядку номер заказа, затем файл сохраняется для получения изменений проделанных другими пользователями.  
Т.к. книга в общем доступе, чтобы избежать конфликта при изменении ячейки другими пользователями (до обновления файла она у них является пустой, хотя другой пользователь уже мог занять эту строку путем внесения данных и сохранения файла).  
3. В последнюю пустую ячейку столбца "Принять заказ" вносится следующий номер заказа, файл снова сохраняется, чтобы внести изменения в общую базу.  
4. Менеджер вносит данные и закрывает форму, файл сохраняется.  
 
 Так форма работает в данный момент. Но файл очень большьй (40 МБ) и при общем доступе долго сохраняется, для оптимизации работы нужно сократить число сохранений (1-е сохранение-для обновления изменений проделанных другими пользователями, чтобы определить следующий номер заказа и номер последней пустой строки), автоматический перерасчетячеек отключен, на каждом листе на событие WorksheetChange стоит код на пересчет теккущей строки.  
 
В Excel есть опция Обновлять изменения для книги с общим доступом.  
Сервис-Доступ к книге...-Подробнее-Обновлять изменения  
Минимальный интервал обновления 5 мин. (параметр Только посмотреть чужие изменения).    
 
Вопрос: как кодом проделать обновление изменений  
Спасибо за то, что дочитали, и за предложения.
 
Да вам батенько в Access обращаться нужно. В Excele можно но будет громоздко
 
Знаю, что Access нужен, как раз для него задача, тем более что на основании этой базы отчеты строятся. Но пока вникну в Access, нужно чтобы оптимизировать работу этого файла.
 
Там есть мастер форм, типа создать новую запись,  
только нужно будет импортировать данные из экселя.
 
{quote}{login=Алексей}{date=18.10.2009 12:01}{thema=}{post}Автоматическое обновление долно стать альтернативой сохранению.  
 
Исходные данные: имеется общая база в Excel (книга) и пользовательская форма (VBA), где на листе БАЗА менеджеры вносят заказы в эту книгу в режиме общего доступа при помощи пользовательской формы.    
Действия формы:  
1. При нажатии кнопки "Принять заказ" выскакивает форма (форма написана, вопрос только в обновлении данных).  
2. Определяется следующий по порядку номер заказа, затем файл сохраняется для получения изменений проделанных другими пользователями.  
Т.к. книга в общем доступе, чтобы избежать конфликта при изменении ячейки другими пользователями (до обновления файла она у них является пустой, хотя другой пользователь уже мог занять эту строку путем внесения данных и сохранения файла).  
3. В последнюю пустую ячейку столбца "Принять заказ" вносится следующий номер заказа, файл снова сохраняется, чтобы внести изменения в общую базу.  
4. Менеджер вносит данные и закрывает форму, файл сохраняется.  
 
 Так форма работает в данный момент. Но файл очень большьй (40 МБ) и при общем доступе долго сохраняется, для оптимизации работы нужно сократить число сохранений (1-е сохранение-для обновления изменений проделанных другими пользователями, чтобы определить следующий номер заказа и номер последней пустой строки), автоматический перерасчетячеек отключен, на каждом листе на событие WorksheetChange стоит код на пересчет теккущей строки.  
 
В Excel есть опция Обновлять изменения для книги с общим доступом.  
Сервис-Доступ к книге...-Подробнее-Обновлять изменения  
Минимальный интервал обновления 5 мин. (параметр Только посмотреть чужие изменения).    
 
Вопрос: как кодом проделать обновление изменений  
Спасибо за то, что дочитали, и за предложения.{/post}{/quote}  
 
разбить на части..  
 
можно по дням - т.е. сегодня делаем в один файл, завтра в другой  
 
по окончании раб дня можно объединять..  
 
как-то так
Живи и дай жить..
 
Разбивать файл на части нельзя, файл используется от вбития в базу и до отгрузки продукции, менеджерами, мастерами,производством,складом. Нужно на Access переходить, а к файлу из других файлов подвязано еще с десяток отчетов из сводных таблиц, чтобы разгрузить работу основного файла.  
Похоже нельзя увидеть обновления проделанные другими пользователями без сохранения.
 
конечно нельзя!  физически невозможно..  
 
отличие программ управления базами данных в том и состоит, что они (тоже сохраняют) данные частями(записями), а не весь файл сразу.  
 
делать из иксель субд - изобретать велосипед..  
 
подумайте все таки над разбиением - категоричные ответы всегда субъективны. физическая реальность - сплав компромиссов.(с) мое :)
Живи и дай жить..
 
Кто ищет, тот всегда найдет!  
Обновление книги при общем доступе без сохранения  
 
Sub Refresh()  
ThisWorkbook.AcceptAllChanges  
End Sub
 
рано радуетесь:  
 
это значит проверить все изменения.  
 
 
толкую  проверить не появились ли изменения в общем файле со времени его открытия..  но изменения могут там появиться только при сохранении..  
 
т.е. вы открыли файл, в a1 была 1  
 
затем Василий Иванович открыл файл, исправил на 2 - если проверите изменения в этот момент, то ничего не обнаружите  
 
Василий Иванович сохранил файл с изменениями - вот теперь можете проверять..
Живи и дай жить..
 
Мне как раз это и нужно, изменения будут видны только после сохранения другим пользователем. А по другому никак, только БД. Перед каждым внесением нового заказа менеджерам приходилось сохранять, теперь форма будет обновлять,немного ускорит работу менеджеров!
 
{quote}{login=Алексей}{date=20.10.2009 09:11}{thema=}{post}  
Похоже нельзя увидеть обновления проделанные другими пользователями без сохранения.{/post}{/quote}  
 
 
 
так все таки сохранение присутствует.. - ну не догадался.
Живи и дай жить..
 
Извиняюсь, что не точно вопрос задал, непонятно изложил. Смысл в сокращении сохранений в течении внесения одного заказа, теперь работает. Спасибо за предложения решения, может действительно стоит на части разделить.
 
Пост выше мой
 
Если нет желания связываться с Аксесом то возможен такой финт ушами:  
Если книга открыта не в прямом доступе то изменения внесёные пользователем формулируются отдельным текстовым файлом (т.е. на каждую запись делается отдельный текстовой файл)и сохраняются в общей папке. Эти записи-файлы вносятся в общую книгу когда кто-нить откроет её в прямом доступе (рано или поздо это произойдёт).Т.е. если книга открыта в прямом доступе записи вносится в книгу, книга сохраняется после чего обработаные записи-файлы уничтожаются.Если книга открыта не впрямом доступе записи вносятся в книгу без уничтожения и без сохранения книги.    
При этом нужно учесть следующие проблемы:  
1)Необходимо создание уникального имени файла-записи, наиболее оптимально на мой взглад это когда имя формируется из имени пользователя,даты и времени создания записи.  
2)Просмотр изменений. Либо это делать через открытие книги, либо сохранять записи в книгу один раз в день например утром.  
3)Возможна ситуация когда один из пользователь "А" открывает ещё необновлёную книгу в совместном доступе,а во время открытия его экземпляра,другой экземпляр книги с прямым доступом (открытый чуть раньше) собирает записи, сохраняется и успевает уничтожить все или часть файлов-записей. Т.е. необновлёный экземпляр у пользователя "А" не успевает обновиться. Решить эту проблему можно, но ещё руки до этого не добрались
 
Дополнение к моему посту выше.  
Excel очень быстро работает с текстовыми файлами
 
Интересное решение через текстовый файл отслеживать изменения.В моей задаче главное знать максимальный номер заказа и номер строки, где он находится. Создам файл с этим номером а в него запишу номер строки и сохраню в общую папку, а потом буду проверять максимальный номер и считывать из него номер строки на листе. А сохранение изменений внесенных на лист буду делать только перед закрытием базы.  
Спасибо за идею!
 
А лучше записать в БД Access о оттуда считать.
Страницы: 1
Читают тему
Наверх