Удалить надстройку из списка надстроек

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

Удалить надстройку из списка надстроек

Сообщение Annushka » 11.04.2006 (Вт) 8:18

Как при выходе из файла xls удалить надстройку из списка надстроек?

Проблема связана со следующим.
При открытии файла xls надстройка добавляется и активируется (галочка ставится), а при выходе дезактивируется.
При открытии любого файла на этом компьютере надстройка существует в списке надстроек. И если я пытаюсь добавить надстройку с таким же именем, но из другого места, ничего не получается (надстройка остается старая с предыдущим путем).
Удалить могу только ручками: если удалить надстройку с места на диске, с которого она бралась и пытаться ее активировать, появляется вопрос удалять или нет. Но в макрос при этом ничего не записывается :(

Подскажите, пожалуйста.

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

Сообщение Annushka » 12.04.2006 (Ср) 9:41

Неужели только удалением из реестра? :(

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 12.04.2006 (Ср) 10:56

Если можно присоединюсь к вопросу.
Как можно снять присоединенные AddIns, референс, и компоненты, не только в vba так же и vb.
Чтобы они исчезли из списка.
Единственный раз, не помню, толи vba, толи vb спросил меня “Missing references… delete from list?” и убрал из списка несуществующий reference.
Подобное никак не смог потом повторить.
Приходится переименовать и.т.д и т.п.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 12.04.2006 (Ср) 11:07

Не совсем в тему присоединился...
Референсы и компоненты вообще из другой области, и снимаются через VBE. В поиск.

Как addin снять средствами excel, я не знаю. А что будет если удалить файл, после чего сделать .installed=true?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Димитрий
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 194
Зарегистрирован: 26.01.2005 (Ср) 22:47
Откуда: Волгоград

Сообщение Димитрий » 12.04.2006 (Ср) 11:12

Для Excel XP не существует явного способа удаления элемента из коллекции Addlns. Коллекция Addlns не имеет метода D e l e t e или Remove. Одним из способов удаления надстройки из диалогового окна Надстройки является непосредственное редактирование пара-
метра системного реестра (HKEY_CURRENT_USER\Software\Microsoft\Office\10.0\Excel\Add-in Manager).
Еще одним способом удаления надстройки из коллекции Addlns
является удаление, перемещение или переименование файла XLA,
который содержит надстройку. При последующей попытке уста-
новки этой надстройки будет отображено предупреждение. В этом предупреждений пользователю предоставляется возможность удалить надстройку из коллекции Addlns.

John Walkenbach

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

Сообщение Annushka » 12.04.2006 (Ср) 14:42

Если удалить программно не получится, но нельзя ли хотя бы как-то заставить заменить путь к надстройке?
А то получается, сто на строку
Код: Выделить всё
Set myAddIn = AddIns.Add(Filename:=ActiveWorkbook.Path & "\Form.xla", CopyFile:=False)

не ругается, но ничего и не делает, если надстройка с таким именем уже была.

Димитрий
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 194
Зарегистрирован: 26.01.2005 (Ср) 22:47
Откуда: Волгоград

Сообщение Димитрий » 12.04.2006 (Ср) 16:58

Может быть, если Вы часто используете надстройку с одинаковым именем (что вообще-то нонсенс), не подключать её, а просто открывать в рабочей книге:
Workbooks.Open ActiveWorkbook.Path & "\Form.xla"

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

Сообщение Annushka » 12.04.2006 (Ср) 17:32

Димитрий писал(а):если Вы часто используете надстройку с одинаковым именем (что вообще-то нонсенс)


Это почему же?

Димитрий
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 194
Зарегистрирован: 26.01.2005 (Ср) 22:47
Откуда: Волгоград

Сообщение Димитрий » 13.04.2006 (Чт) 8:20

Надстройка это обычно какой-либо универсальный инструмент или дополнение, необходимый Вам в работе с программой постоянно. И для чего её каждый раз подключать и отключать (а тем более удалять из спика надстроек или менять путь к ней) я не представляю.
Объясните Вашу глобальную задачу, я думаю у неё есть альтернативное (возможно более правильное :wink:) решение.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 13.04.2006 (Чт) 10:52

Глобальная задача, я полагаю, http://bbs.vbstreets.ru/viewtopic.php?p=6593372#6593372
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

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

Сообщение Annushka » 13.04.2006 (Чт) 11:36

Есть некоторое количество пользователей (сейчас около 20). У каждого есть свой файл Excel, в котором из макросов существует только подключение надстройки при входе и отключение при выходе.
В надстройке подключается пользовательское меню. Вот это меню и программы постоянно меняются и дорабатываются. При изменениях я просто меняю xla-файлик.
Буду очень признательна, если подскажете "альтернативное (возможно более правильное Wink) решение"

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 13.04.2006 (Чт) 11:44

А почему недостаточно просто менять xla-файлик?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 13.04.2006 (Чт) 15:11

To Gserg
Зря вы меня прогнали в поиск. Там к сожалению ничего не нашел. (Плохо не искал)

To Annushka
Есть некоторое количество пользователей (сейчас около 20). У каждого есть свой файл Excel, в котором из макросов существует только подключение надстройки при входе и отключение при выходе.
В надстройке подключается пользовательское меню. Вот это меню и программы постоянно меняются и дорабатываются. При изменениях я просто меняю xla-файлик.
Буду очень признательна, если подскажете "альтернативное (возможно более правильное Wink) решение"
Я делаю вот так:
Код: Выделить всё
For Each ref In Application.ThisWorkbook.VBProject.References
If ref.Name = "Имя вба проекта в вашем xla (учтите, не файла xla)" Then Application.ThisWorkbook.VBProject.References.Remove ref
Next ref

Str = ThisWorkbook.Path “или нужное вам
Application.ThisWorkbook.VBProject.References _
.AddFromFile Str & "\ Имя файла xla .xla"

Главное не получить конфликт имен VBA проектов в проектах в главной книге и в загружаемой.
И в конце:
Код: Выделить всё
Private Sub Workbook_BeforeClose(Cancel As Boolean)

‘Здес какие то проверки у меня, уже не помню, для чего.
For Each ref In Application.ThisWorkbook.VBProject.References
If ref.Name = "Имя вба проекта" Then Application.ThisWorkbook.VBProject.References.Remove ref
Next ref
End Sub
Так, по кусочкам подсоединяю код из разных файлов
которые в сумме иногда весят около 30 мб со своими формами классами и.т.д.
А в основной книге у меня только одна кнопка в тулбаре и маленькое меню того, что хочу подсоединить.
И вообще не смотрю в сторону надстроек.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 13.04.2006 (Чт) 15:17

Avtopic
Существует большая разница между надстройками, подключаемыми в референсы к проекту, и надстройками, подключаемыми в список самого excel. Другая суть и другое назначение.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 13.04.2006 (Чт) 15:44

Знаю!

По-моему, в автор хочет, решит задачу, где имеет смысл подключить другой проект именно в референсы.

Почему нет?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 13.04.2006 (Чт) 15:52

Потому что суть добавления в проектные референсы - чтобы из кода книги использовать код надстройки. Annushka хочет, чтобы в конечных книгах кода не было.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

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

Сообщение Annushka » 13.04.2006 (Чт) 16:52

Не поняла я пока, что такое проектные референсы.
Но с надстройками уже намучилась: заходят несколько человек, подключают надстройку, и сетка не выдерживает (или висит или ругается).
А то, что предложил Avtopic, пока не получается. Ругается на конфликт имен, а в главной книге вообще еще ничего нет, кроме подключения референсов

Уже не ругается. Попробую так.

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 13.04.2006 (Чт) 17:04

Имя проекта в книге поставьте различное от имени проекта в xla

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

Сообщение Annushka » 13.04.2006 (Чт) 17:09

Спасибо. Уже поставила.

GSerg, а в чем отличие референсов от надстроек? Я что-то особо не заметила разницы, кроме того, что галочки стоят в разных местах.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 13.04.2006 (Чт) 17:15

Референсами пользуешься ты, надстройками - excel...
Если, к примеру, Поиск решения подключен, то можно пользоваться им из excel, но нельзя из кода вызвать функцию SolverSolve, пока Поиск решения не бует подключен в референсы проекта...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

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

Сообщение Annushka » 14.04.2006 (Пт) 10:54

GSerg писал(а):Референсами пользуешься ты, надстройками - excel...
Если, к примеру, Поиск решения подключен, то можно пользоваться им из excel, но нельзя из кода вызвать функцию SolverSolve, пока Поиск решения не бует подключен в референсы проекта...


Исходя из Вашего объяснения, мне вроде больше подходят референсы. Мне кажется, что я ими пользуюсь, а не Excel. Хотя... Как отделить себя от Excel? :)

Решила попробовать подключить через референсы, посмотреть, чем отличается в работе. Но при попытке одновременно подключить тот же файл xla, но из другого xls, получаю ошибку
Код: Выделить всё
Error in loading DLL

:?:

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

Сообщение Nicky » 14.04.2006 (Пт) 14:05

Annushka, не пойму, чем не подошел мой вариант с невидимостью панели?

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

Сообщение Annushka » 17.04.2006 (Пн) 7:44

Nicky писал(а):Annushka, не пойму, чем не подошел мой вариант с невидимостью панели?


А можно поподробнее или ссылочку?

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

Сообщение Nicky » 17.04.2006 (Пн) 8:02


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

Сообщение Annushka » 17.04.2006 (Пн) 8:40

Спасибо, это я видела и все заработало. Но после того, как файл xla подключает третий-четвертый человек (видимо, в зависимости от нагрузки на сеть) у следующего либо зависает активизация надстройки, либо выскакивает ошибка. Я поэтому и ищу еще варианты.

Димитрий
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 194
Зарегистрирован: 26.01.2005 (Ср) 22:47
Откуда: Волгоград

Сообщение Димитрий » 17.04.2006 (Пн) 8:51

А может быть дать каждому пользователю по надстройке.
А обновлять их по сети.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 17.04.2006 (Пн) 9:04

Неправильно это...
Когда надстройка одна, это правильно...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

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

Сообщение Annushka » 17.04.2006 (Пн) 9:21

Сейчас так и делаю. Выхода пока другого не вижу. Просто не хотелось бы их размножать, при любом размножении существует возможность появления разных версий надстройки. :?


Вернуться в VBA

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

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

    TopList