Обновление макросов при загрузке файла Excel

Программирование на Visual Basic for Applications
Annushka
Обычный пользователь
Обычный пользователь
 
Сообщения: 81
Зарегистрирован: 17.05.2005 (Вт) 12:44
Откуда: Украина

Обновление макросов при загрузке файла Excel

Сообщение Annushka » 23.03.2006 (Чт) 14:21

Имеется несколько одинаковых файлов Excel для разных пользователей. Для того, чтобы не обновлять макросы, формы и меню во всех файлах, сделала следующим образом:

Код: Выделить всё

Private Sub Workbook_Open()

     ThisWorkbook.VBProject.VBComponents.Remove ThisWorkbook.VBProject.VBComponents.Item("Module1")
       
     ThisWorkbook.VBProject.VBComponents.Import ActiveWorkbook.Path & "\Module1.bas"
     
     Module1.Upd_Module

     Module1.Add_Menu

End Sub


Т.е. при запуске обновляется Module1, а дальше выполняются процедуры из этого модуля.

НО почему-то сначала срабатывает Import , а потом Remove. И получаю добавление Module11 (создается, т.к. Module1 имеется), удаление Module1. В результате получаем Module11 вместо Module1.

Не подскажете, что не так?
Последний раз редактировалось Annushka 23.03.2006 (Чт) 16:05, всего редактировалось 1 раз.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 23.03.2006 (Чт) 14:25

Вопрос первый. Ты удаляешь сама себя? Странно, что это вообще получается.
Вопрос второй. А какая тебе разница, как называется модуль?
Вопрос третий. А нельзя ли переобзовать модуль после импорта?
Lasciate ogni speranza, voi ch'entrate.

Annushka
Обычный пользователь
Обычный пользователь
 
Сообщения: 81
Зарегистрирован: 17.05.2005 (Вт) 12:44
Откуда: Украина

Сообщение Annushka » 23.03.2006 (Чт) 14:30

1. Думаю, что нет. Sub Workbook_Open() находится же не в этом модуле.
2-3. Можно, но казалось, что все должно работать.

Annushka
Обычный пользователь
Обычный пользователь
 
Сообщения: 81
Зарегистрирован: 17.05.2005 (Вт) 12:44
Откуда: Украина

Сообщение Annushka » 23.03.2006 (Чт) 14:33

Странно (или это мне только кажется странно).
Все команды, кроме Remove срабатывают сразу, а она во время выхода из Sub Workbook_Open

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 23.03.2006 (Чт) 15:13

Annushka
Может я не понял всей глубины проблемы, но почему бы не хранить логику в одной книге, лежащей в ...Program Files\Microsoft Office\Office\XLStart\ ?

Annushka
Обычный пользователь
Обычный пользователь
 
Сообщения: 81
Зарегистрирован: 17.05.2005 (Вт) 12:44
Откуда: Украина

Сообщение Annushka » 23.03.2006 (Чт) 15:31

Каждый работает на своем компе. Файлы на сервере.

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 23.03.2006 (Чт) 15:38

Ну и? Не все ли равно откуда подключать, дополнительные модули? С сервера, с локального пути?

Annushka
Обычный пользователь
Обычный пользователь
 
Сообщения: 81
Зарегистрирован: 17.05.2005 (Вт) 12:44
Откуда: Украина

Сообщение Annushka » 23.03.2006 (Чт) 15:59

Чего-то я не понимаю. Напишите, пожалуйста, где я не права.
Думала, как мне сделать одинаковые макросы в паре десятков файлов.
После прочтения форума открылись следующие пути:
1. Хранить макросы в файле надстройки, который находится в заранее определенном месте.
2. Хранить макросы в каком-то файле Excel и запускать их оттуда.
3. Хранить в файлах .bas и .frm, обновлять при входе в каждую книгу. (то, что я выбрала)

Путь 1 не подходит, т.к. компьютеры разные, Office разные, общее только место на сервере для файлов.
Путь 2 не подходит, т.к. каждому пользователю открывается файл Excel с макросами и висит открытый.

Я не права?

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 23.03.2006 (Чт) 16:28

Если Office разные - то и 3 путь неверен.

Ибо, импортить разный код в разные версии не получится.

Самый рациональный путь - это 1.

Положи ее на сервер и пусть все ее себе подключат. Вот и все.

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 23.03.2006 (Чт) 16:43

Annushka писал(а):1. Хранить макросы в файле надстройки, который находится в заранее определенном месте.
2. Хранить макросы в каком-то файле Excel и запускать их оттуда.

Путь 1 не подходит, т.к. компьютеры разные, Office разные, общее только место на сервере для файлов.
Путь 2 не подходит, т.к. каждому пользователю открывается файл Excel с макросами и висит открытый.


"Путь 1" - решение: Excel-Сервис-Параметры-Общие-Каталог автозагрузки = "\\SERVER\Share1\Каталог с моими любимыми файлами настроек", настройки хранить в формате Office97

"Путь 2" - книга может быть AddIn + защита паролем от просмотра = защита от любопытных глаз

Annushka
Обычный пользователь
Обычный пользователь
 
Сообщения: 81
Зарегистрирован: 17.05.2005 (Вт) 12:44
Откуда: Украина

Сообщение Annushka » 24.03.2006 (Пт) 11:42

Спасибо всем. Чего-то в голове прояснилось.
Сделала по пути 1. Создала .xla, прописала каталог автозагрузки, положила туда .xla.
Даже лучше получилось, чем я ожидала: в пользовательских файлах совершенно нет макросов!
НО возникло небольшое неудобство. У меня при загрузке добавляется пользовательское меню. И теперь при любом входе в Excel пользователь лицезреет это дополнительное меню.
Вопрос: нельзя ли программно управлять параметром "каталог автозагрузки" или загрузкой файла .xla? Т.е. при входе в конкретный файл Excel запустить что-то типа "Загрузить .xla"?

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 24.03.2006 (Пт) 12:29

Annushka писал(а):Даже лучше получилось, чем я ожидала: в пользовательских файлах совершенно нет макросов!
Вопрос: нельзя ли программно управлять параметром "каталог автозагрузки" или загрузкой файла .xla? Т.е. при входе в конкретный файл Excel запустить что-то типа "Загрузить .xla"?


Придется все-таки с макросами в файлах :(
Но зато их не придется обновлять :)

Код: Выделить всё
Private Sub Workbook_Open()
  Application.AltStartupPath = "\\SERVER\Share1\Каталог с моими любимыми файлами настроек"
End Sub

Annushka
Обычный пользователь
Обычный пользователь
 
Сообщения: 81
Зарегистрирован: 17.05.2005 (Вт) 12:44
Откуда: Украина

Сообщение Annushka » 24.03.2006 (Пт) 12:38

Спасибо. Каталог меняет, но файл .xla не загружает. :(

А если без каталога загрузки вообще обойтись?
В открываемом файле написать:
Код: Выделить всё
Private Sub Workbook_Open()
    Set n = Workbooks.Open("C:\Module\File1.XLA")

End Sub


Только я ее чего-то в Sub Workbook_BeforeClose закрыть не могу.
Помогите, пожалуйста...

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 24.03.2006 (Пт) 13:49

Но файлов может быть больше одного
Решение:
Код: Выделить всё

Private Sub Workbook_Open()
  Application.AltStartupPath = "\\SERVER\Share1\Каталог с моими любимыми файлами настроек"
  CreateObject "Excel.Application"
End Sub


Хотя подозреваю, что есть способ проще
Успехов!

Annushka
Обычный пользователь
Обычный пользователь
 
Сообщения: 81
Зарегистрирован: 17.05.2005 (Вт) 12:44
Откуда: Украина

Сообщение Annushka » 24.03.2006 (Пт) 13:58

Все то же.
Каталог меняет, но файл .xla не загружает.

Annushka
Обычный пользователь
Обычный пользователь
 
Сообщения: 81
Зарегистрирован: 17.05.2005 (Вт) 12:44
Откуда: Украина

Сообщение Annushka » 24.03.2006 (Пт) 14:55

Все получилось:


Код: Выделить всё

Private Sub Workbook_BeforeClose(Cancel As Boolean)
   
    AddIns("File1").Installed = False

End Sub

Private Sub Workbook_Open()

    Set myAddIn = AddIns.Add(Filename:="C:\File1.xla", CopyFile:=True)
    AddIns("File1").Installed = True




End Sub

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 24.03.2006 (Пт) 16:12

Альтернативное решение: скрывать ваше меню, когда пользователь работает с другими документами.
В аттаче 2 файла: файл макросов mymacros.xla, нужно положить в папку c:\macros, и файл "Книга с макросами.xls", которая загружает из указанной локации mymacros.xla и может работать с ним. Для проверки работы создайте пустую книгу и попереключайтесь между ней и "Книга с макросами.xls"

Успехов!
Вложения
marcos.rar
(15.43 Кб) Скачиваний: 95

Annushka
Обычный пользователь
Обычный пользователь
 
Сообщения: 81
Зарегистрирован: 17.05.2005 (Вт) 12:44
Откуда: Украина

Сообщение Annushka » 24.03.2006 (Пт) 16:30

Спасибо. Посмотрю


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 76

    TopList  
cron