Впервые столкнулся с такой проблемой, пытаясь реализовать архитектуру многопользовательского доступа к макросам, хранящимся в одной книге Структура такова:
Поясню. В файле с макросами (буду называть его "Главный файл") куча кода "на все случаи жизни". В файлах пользователей только процедуры вызова этих макросов из "Главного файла" Всё работает отлично до тех пор, пока два или более пользователя не запустят любые из макросов ОДНОВРЕМЕННО В этом случае у первого пользователя макрос успевает сработать, а у остальных - появляется сообщение об ошибке VBA (доступ к файлу) и зависает Excel
Есть светлые мысли как сохранить структуру как на картинке выше и сделать её работоспособной при любых действиях пользователя?
Всем привет
Впервые столкнулся с такой проблемой, пытаясь реализовать архитектуру многопользовательского доступа к макросам, хранящимся в одной книге Структура такова:
Поясню. В файле с макросами (буду называть его "Главный файл") куча кода "на все случаи жизни". В файлах пользователей только процедуры вызова этих макросов из "Главного файла" Всё работает отлично до тех пор, пока два или более пользователя не запустят любые из макросов ОДНОВРЕМЕННО В этом случае у первого пользователя макрос успевает сработать, а у остальных - появляется сообщение об ошибке VBA (доступ к файлу) и зависает Excel
Есть светлые мысли как сохранить структуру как на картинке выше и сделать её работоспособной при любых действиях пользователя?Serge_007
Может, "кучу кода" в модуль класса завернуть? Всё-таки класс - это тип. Тогда при использовании, по идее, экземпляр класса у каждого пользователя свой должен создаваться по New и мешать друг другу не должны...
Я фантазирую, не более - типа "мозговой штурм", сам такого не делал (на многих пользователях), но, пользуясь случаем, попробовать можно. Тем более, не своими руками
Может, "кучу кода" в модуль класса завернуть? Всё-таки класс - это тип. Тогда при использовании, по идее, экземпляр класса у каждого пользователя свой должен создаваться по New и мешать друг другу не должны...
Я фантазирую, не более - типа "мозговой штурм", сам такого не делал (на многих пользователях), но, пользуясь случаем, попробовать можно. Тем более, не своими руками Gustav
Что это даст? Ведь проблема в одномоментном обращении к "Главному файлу"...
Вот пример кода из файла пользователя:[vba]
Код
'id111 (элемент: button, атрибут: onAction), 2010+ Private Sub onAction_id111(control As IRibbonControl) Application.ScreenUpdating = False Workbooks.Open ThisWorkbook.Path & "\MAIN_Macro.xls" Application.Run "'MAIN_Macro.xls'!Module1.Macro1": Workbooks("MAIN_Macro.xls").Close False Application.ScreenUpdating = True End Sub
[/vba]
Код открывает "Главный" файл, запускает из него нужный макрос и закрывает "Главный" файл без сохранения И если в тот момент, когда "Главный" файл открыт и из него запущен макрос, кто-то ещё пытается так же обратиться к макросу в "Главном" файле - происходит ошибка
Что это даст? Ведь проблема в одномоментном обращении к "Главному файлу"...
Вот пример кода из файла пользователя:[vba]
Код
'id111 (элемент: button, атрибут: onAction), 2010+ Private Sub onAction_id111(control As IRibbonControl) Application.ScreenUpdating = False Workbooks.Open ThisWorkbook.Path & "\MAIN_Macro.xls" Application.Run "'MAIN_Macro.xls'!Module1.Macro1": Workbooks("MAIN_Macro.xls").Close False Application.ScreenUpdating = True End Sub
[/vba]
Код открывает "Главный" файл, запускает из него нужный макрос и закрывает "Главный" файл без сохранения И если в тот момент, когда "Главный" файл открыт и из него запущен макрос, кто-то ещё пытается так же обратиться к макросу в "Главном" файле - происходит ошибкаSerge_007
создать из главного файла надстройку или подключать его как-то как библиотеку через Tools \ References?
Как надстройку? Скорее нет То же касается и подключений Пользователи не должны трогать "Главный" файл, да и не умеют они этого... Но опять-таки - что даст преобразование его в надстройку? При одномоментном "подключении" нескольких пользователей опять-таки будет конфликт доступа
Нет Честно - даже не думал об этом, потому что общий доступ - это настройка Excel, а тут проблема с конфликтом VBA Но я завтра попробую включить - вдруг получится?
создать из главного файла надстройку или подключать его как-то как библиотеку через Tools \ References?
Как надстройку? Скорее нет То же касается и подключений Пользователи не должны трогать "Главный" файл, да и не умеют они этого... Но опять-таки - что даст преобразование его в надстройку? При одномоментном "подключении" нескольких пользователей опять-таки будет конфликт доступа
Нет Честно - даже не думал об этом, потому что общий доступ - это настройка Excel, а тут проблема с конфликтом VBA Но я завтра попробую включить - вдруг получится?
Сохрани файл как надстройку, и подключи к рабочим файлам через Referens. При запуске рабочего файла у пользователя будет автоматически подгружаться надстройка с работающими кодами.
Сохрани файл как надстройку, и подключи к рабочим файлам через Referens. При запуске рабочего файла у пользователя будет автоматически подгружаться надстройка с работающими кодами. RAN
есть причина по которой нельзя засунуть макросы в файлы пользователей
Можно, это План Б Но хотелось бы этого избежать Смысл в том, что в будущем возможны изменения, которые потребуют корректировки макросов Так вот хотелось бы корректировать один раз в "Главном" файле, чем в каждом файле пользователя
есть причина по которой нельзя засунуть макросы в файлы пользователей
Можно, это План Б Но хотелось бы этого избежать Смысл в том, что в будущем возможны изменения, которые потребуют корректировки макросов Так вот хотелось бы корректировать один раз в "Главном" файле, чем в каждом файле пользователя
Смысл в том, что в будущем возможны изменения, которые потребуют корректировки макросов
именно с такой (наверное) ситуацией я и столкнулся. файлы пользователей (у нас) это в принципе отчет, калькулятор и т.п. - данные в него юзер не вносит. файл пользователя, при открытии сравнивает свою версию с моим файлом и если они не совпадают, открывает файл "Обновление" вставляет свои Path и Name, закрывается, в файле "Обновление" одна кнопка - Обновить без вариантов, макрос Открывает мой файл и сохраняет его как Path и Name. все - у юзера новый файл, но это конечно, когда - данные в него юзер не вносит
Смысл в том, что в будущем возможны изменения, которые потребуют корректировки макросов
именно с такой (наверное) ситуацией я и столкнулся. файлы пользователей (у нас) это в принципе отчет, калькулятор и т.п. - данные в него юзер не вносит. файл пользователя, при открытии сравнивает свою версию с моим файлом и если они не совпадают, открывает файл "Обновление" вставляет свои Path и Name, закрывается, в файле "Обновление" одна кнопка - Обновить без вариантов, макрос Открывает мой файл и сохраняет его как Path и Name. все - у юзера новый файл, но это конечно, когда - данные в него юзер не вноситNic70y
Честно - даже не думал об этом, потому что общий доступ - это настройка Excel, а тут проблема с конфликтом VBA Но я завтра попробую включить - вдруг получится?
Серж, попробовал Общий доступ-то? Получилось что-нибудь?
Честно - даже не думал об этом, потому что общий доступ - это настройка Excel, а тут проблема с конфликтом VBA Но я завтра попробую включить - вдруг получится?
Серж, попробовал Общий доступ-то? Получилось что-нибудь?Gustav